使用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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
PHP 引用文件技巧
Mar 02 PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
PHP判断上传文件类型的解决办法
Oct 20 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
PHP的PDO操作简单示例
Mar 30 PHP
php和redis实现秒杀活动的流程
Jul 17 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 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
第十五节--Zend引擎的发展
2006/11/16 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
token 机制和实现方式
2020/12/15 Javascript
python抖音表白程序源代码
2019/04/07 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
人事专员岗位职责范本
2014/03/04 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
大学生见习报告总结
2014/11/04 职场文书
高一英语教学反思
2016/03/03 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
Redis安装启动及常见数据类型
2021/04/14 Redis
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
mysql数据库实现设置字段长度
2022/06/10 MySQL