使用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 相关文章推荐
桌面中心(二)数据库写入
Oct 09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
PHP 的几个配置文件函数
Dec 21 PHP
zend framework多模块多布局配置
Feb 26 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
php操作xml入门之cdata区段
Jan 23 PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 PHP
深入浅析Yii admin的权限控制
Aug 31 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
php实现微信发红包功能
Jul 13 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
js 替换
2008/02/19 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
vue v-model动态生成详解
2018/06/30 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
浅谈js闭包理解
2019/03/28 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
Python基于百度AI的文字识别的示例
2018/04/21 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
美国Max仓库:Max Warehouse
2020/05/31 全球购物
教师实习期自我鉴定
2013/10/06 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
会计求职自荐信
2014/06/20 职场文书
物理学专业求职信
2014/07/04 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
python爬虫框架feapde的使用简介
2021/04/20 Python
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技