使用PHP实现下载CSS文件中的图片


Posted in PHP onDecember 06, 2015

作为一个资深并且专业的扒皮人员,在我从初三开始投入伟大的互联网中到现在积累了丰富的扒皮经验。我相信每个做web的程序员也都会有类似的经历。

在扒皮过程中,必不可少的需要下载样式文件中的图片。碰到比较庞大的样式文件,其中可能会有上百个需要下载的图片,那么使用下面这段小代码是最为合适的了。

< ?php
/*
 More & Original PHP Framwork
 Copyright (c) 2007 - 2008 IsMole Inc.

 Author: kimi
 Documentation: 下载样式文件中的图片,水水专用扒皮工具
*/

//note 设置PHP超时时间
set_time_limit(0);

//note 取得样式文件内容
$styleFileContent = file_get_contents('images/style.css');

//note 匹配出需要下载的URL地址
preg_match_all("/url\((.*)\)/", $styleFileContent, $imagesURLArray);

//note 循环需要下载的地址,逐个下载
$imagesURLArray = array_unique($imagesURLArray[1]);
foreach($imagesURLArray as $imagesURL) {
 file_put_contents(basename($imagesURL), file_get_contents($imagesURL));
}

再给大家分享一段封装好的类

/** 
* 获取CSS中图片地址,并且保存到本地 
*/
class getInCssImage
{ 
/** 
* 图片保存下来
* @param $cssUrl css的url地址
* @param $dir 保存图片的目录
* @return void
*/
static public function saveImage($cssUrl, $dir)
{ 
$content = file_get_contents($cssUrl); 
$patterns = '/images(.*).(jpg|gif|png)/'; //正则根据不同地址需要变换
preg_match_all($patterns, $content, $matches);
$imagesUrls = $matches[0];
if (!is_dir($dir))
mkdir(dirname(__FILE__). '/'. $dir, 0777);
foreach($imagesUrls as $image)
{ 
ob_start();
$imageUrl = "http://www.xx.com/".$image; //这个地址本来用程序给获取的。偷懒了下
readfile($imageUrl);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
$localImage = $dir. strchr($image, '/'); //存到本地的图片地址
$fp = fopen($localImage, 'a');
fwrite($fp, $img);
fclose($fp);
} 
} 
}
}
$content = getInCssImage::saveImage('/css/css.css', 'image');

最后预祝各位在扒皮的过程中,一扒到底!

另外附上关于file_put_contents定义和用法

file_put_contents() 函数把一个字符串写入文件中。
与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

语法

file_put_contents(file,data,mode,context)

参数 描述

file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
data 可选。规定要写入文件的数据。可以是字符串、数组或数据流。
mode 
可选。规定如何打开/写入文件。可能的值:
FILE_USE_INCLUDE_PATH
FILE_APPEND
LOCK_EX
context 
可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。

PHP 相关文章推荐
新手学PHP之数据库操作详解及乱码解决!
Jan 02 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 PHP
php TP5框架生成二维码链接
Apr 01 PHP
PHP扩展Memcache分布式部署方案
Dec 06 #PHP
PHP微信红包API接口
Dec 05 #PHP
php实现微信发红包
Dec 05 #PHP
详解php比较操作符的安全问题
Dec 03 #PHP
thinkPHP模型初始化实例分析
Dec 03 #PHP
ZF框架实现发送邮件的方法
Dec 03 #PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 #PHP
You might like
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
python中使用mysql数据库详细介绍
2015/03/27 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
详解python单元测试框架unittest
2018/07/02 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
公司部门司机岗位职责
2014/01/03 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL