使用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 相关文章推荐
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
php header函数的常用http头设置
Jun 25 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
php版微信公众号自定义分享内容实现方法
Sep 22 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
Feb 23 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 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+xml编程之xpath的应用实例
2015/01/24 PHP
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
浅析PEP572: 海象运算符
2019/10/15 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
python实现经典排序算法的示例代码
2021/02/07 Python
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
C语言中break与continue的区别
2012/07/12 面试题
小学教师师德反思
2014/02/03 职场文书
访谈节目策划方案
2014/05/15 职场文书
给病人的慰问信
2015/03/23 职场文书
天那边观后感
2015/06/09 职场文书
在职证明格式样本
2015/06/15 职场文书
自书遗嘱范文
2015/08/07 职场文书
小学数学教学随笔
2015/08/14 职场文书
Redis中一个String类型引发的惨案
2021/07/25 Redis