使用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类
Jul 15 PHP
php的正则处理函数总结分析
Jun 20 PHP
phpMyAdmin 安装配置方法和问题解决
Jun 08 PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
常见php数据文件缓存类汇总
Dec 05 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
PHP 芝麻信用接入的注意事项
Dec 01 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP实现异步调用方法研究与分享
2011/10/27 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
java script编程起步(第三课)
2007/01/10 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
python 网络编程详解及简单实例
2017/04/25 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
pandas数据拼接的实现示例
2020/04/16 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
建筑设计所实习生自我鉴定
2013/09/25 职场文书
医学生实习自荐信
2013/10/01 职场文书
化学教学随笔感言
2014/02/19 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
重阳节活动总结
2014/08/27 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书