使用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+SqlServer实现分页显示
Oct 09 PHP
WML,Apache,和 PHP 的介绍
Oct 09 PHP
php smarty的预保留变量总结
Dec 04 PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
javascript 获取图片颜色
2009/04/05 Javascript
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
更改Python命令行交互提示符的方法
2015/01/14 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
Python基于当前时间批量创建文件
2020/05/07 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
安全生产承诺书范文
2014/05/22 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA