使用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 相关文章推荐
QQ登录 PHP OAuth示例代码
Jul 20 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
php将图片文件转换成二进制输出的方法
Jun 10 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
php递归函数怎么用才有效
Feb 24 PHP
Laravel模糊查询区分大小写的实例
Sep 29 PHP
详解PHP中curl_multi并发的实现
Jun 08 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反射机制用法实例
2014/08/28 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
JS猜数字游戏实例讲解
2020/06/30 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
python实现list由于numpy array的转换
2018/04/04 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python 求10个数的平均数实例
2019/12/16 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
python文件和文件夹复制函数
2020/02/07 Python
python实现堆排序的实例讲解
2020/02/21 Python
Python列表切片常用操作实例解析
2020/03/10 Python
python数据类型强制转换实例详解
2020/06/22 Python
Python如何给函数库增加日志功能
2020/08/04 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
承诺书的格式范文
2014/03/28 职场文书
三八妇女节寄语
2015/02/27 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
鸦片战争观后感
2015/06/09 职场文书
致运动员的广播稿
2015/08/19 职场文书
创业计划书之面包店
2019/09/17 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python