使用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 操作符与控制结构
Mar 07 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PHP 断点续传实例详解
Nov 11 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
tp5.1 实现setInc字段自动加1
Oct 18 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 PHP
PHP网页缓存技术优点及代码实例
Jul 29 PHP
详解Laravel框架的依赖注入功能
May 27 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
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
tagName的使用,留一笔
2006/06/26 Javascript
js left,right,mid函数
2008/06/10 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
brook javascript框架介绍
2011/10/10 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
jquery常用操作小结
2014/07/21 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
Python查看微信撤回消息代码
2018/06/07 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
Python计算IV值的示例讲解
2020/02/28 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
仓库理货员岗位职责
2013/12/18 职场文书
教师职称自我鉴定
2014/02/12 职场文书
警察群众路线整改措施
2014/09/26 职场文书
年终工作总结范文2014
2014/11/27 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
办公经费申请报告
2015/05/15 职场文书
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL