使用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中一个控制字符串输出的函数
Oct 09 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
PHP开发负载均衡指南
Jul 17 PHP
php 中英文语言转换类代码
Aug 11 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php单例模式实现方法分析
Mar 14 PHP
php生成年月日下载列表的方法
Apr 24 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
通过php动态传数据到highcharts
Apr 05 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 PHP
PHP 8新特性简介
Aug 18 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/10/09 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
详解jQuery选择器
2016/12/21 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python如何实现一个刷网页小程序
2018/11/27 Python
20行python代码实现人脸识别
2019/05/05 Python
Python tkinter和exe打包的方法
2020/02/05 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
ajax是什么及其工作原理
2012/02/08 面试题
技校毕业生的自我评价
2013/12/27 职场文书
《石榴》教学反思
2014/03/02 职场文书
给校长的建议书200字
2014/05/16 职场文书
委托书怎么写
2014/07/31 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
财务年终工作总结大全
2019/06/20 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
Python中的 Set 与 dict
2022/03/13 Python