PHP file_put_contents()实现批量下载图片文件和css中图片代码

 更新时间:2016年11月25日 17:30  点击:2044
我们先来个个介绍一下关于php 批量下载图片文件和css中图片的方法,这个我们都会用到了file_put_contents()函数了,下面看第一个批量下载图片。
 代码如下 复制代码
set_time_limit(0);//设置PHP超时时间
$imagesURLArray = array_unique($imagesURLArray );
 
foreach($imagesURLArray as $imagesURL) {
    echo $imagesURL;
    echo "<br/>";
    file_put_contents(basename($imagesURL), file_get_contents($imagesURL));

}原理很简单,通过一个含有图片地址的数组循环,然后使用PHP的file_get_contents函数取得图片,在使用file_put_contents函数把图片保存下来。
P.S:一定要加上设置PHP超时时间哦~!

附上原文中通过php下载css中图片的代码:

 代码如下 复制代码

< ?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));
}

?>

延伸到


在扒皮过程中,必不可少的需要下载样式文件中的图片。碰到比较庞大的样式文件,其中可能会有上百个需要下载的图片,那么使用下面这段小代码是最为合适的了。

 代码如下 复制代码

  
    < ?php

 
    //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));

 
    }

 

最后预祝各位在扒皮的过程中,一扒到底


关于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
// **************************************** //
// 功能:给图片添加文字
// 参数: $img 图片文件名
// $new_img 另存图片文件名,如果为空表示不另存图片
// $text 字符串内容
// text_size 字符串大小
// text_angle 字型串输出角度
// text_x 字符串输出 x 坐标
// text_y 字符串输出 y 坐标
// $text_font 字型文件名
// $r,$g,$b 字符串颜色RGB值
// **************************************** //
function img_text($img, $new_img, $text, $text_size, $text_angle, $text_x, $text_y, $text_font, $r, $g, $b){

$text=iconv("gb2312","UTF-8",$text);
Header("Content-type: image/gif");
$im = @imagecreatefromstring(file_get_contents($img)) or die ("打开图片失败!");
$color = ImageColorAllocate($im, $r,$g,$b);

//ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text):
//本函数将 TTF (TrueType Fonts) 字型文字写入图片。
//参数: size 为字形的尺寸;
// angle 为字型的角度,顺时针计算,0 度为水平(由左到右),90 度则为由下到上的文字;
// x,y 二参数为文字的坐标值 (原点为左上角);
// col 为字的颜色;
// fontfile 为字型文件名称;
// text 是字符串内容。
ImageTTFText($im, $text_size, $text_angle, $text_x, $text_y, $color, $text_font, $text);

if ($new_img==""):
ImageGif($im); // 不保存图片,只显示
else:
ImageGif($im,$new_img); // 保存图片,但不显示
endif;

ImageDestroy($im); //结束图形,释放内存空间
}  
?>

要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替换了。 先我们看最基本

strtr() 函数转换字符串中特定的字符。

语法
strtr(string,from,to)或者

strtr(string,array)

*/

 代码如下 复制代码

$addr=strtr($addr,"","aao");        //第一种调用方法
$trans=array("hello"=>"hi","hi"=>"hello");      //定义一个转换数组
echo strtr("hi all, i said hello",$trans);       //第二种调用方法


//普通字符串

echo strtr("hilla warld","ia","eo");

//数组

$arr = array("hello" => "hi", "world" => "earth");
echo strtr("hello world",$arr);

/*
如果 from 和 to 的长度不同,则格式化为最短的长度。

再看一个简单的函数

// +------ 我以前写的一个替换函数

 代码如下 复制代码

function file_modify($search_contents, $replace_contents, $filename)
{
        $fp = file_get_contents($filename);
        $new_fp = str_replace($search_contents, $replace_contents, $fp);
        file_put_contents($filename, $new_fp);
}

// +------ 用法
file_modify('sdf hjhj', 'sdf_test hjhj_test', 'test10.html');


或直接用

// 或者直接用这个

 代码如下 复制代码

preg_replace('|(<div class="body">)(^<]+)(</div>)|iSU', "${1}" . 替换后的内容 . "$3", $str);

 

preg_replace('|(<div class="body">)(^<]+)(</div>)|iSU', "${1}" . 替换后的内容 . "$3", $str);


上面我所说的所有问题都只会替换一个文件里面的,那么我想替换一个站点所有目录里面文件指定字符,那么我们来看下面这个函数

 代码如下 复制代码
<?php    
if (isset($_GET['dir'])){ //设置文件目录    
    $basedir=$_GET['dir'];    
}else{    
    $basedir = '.';    
}  
$auto = 1;    
checkdir($basedir);    
function checkdir($basedir){    
    if ($dh = opendir($basedir)) {    
        while (($file = readdir($dh)) !== false) {    
            if ($file != '.' && $file != '..'){    
                if (!is_dir($basedir."/".$file)) {    
                    echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";    
                }else{    
                    $dirname = $basedir."/".$file;    
                    checkdir($dirname);    
                }    
            }    
        }    
        closedir($dh);    
    }    
}    
function checkBOM ($filename) {    
    global $auto;    
    $contents = file_get_contents($filename);    
    $charset[1] = substr($contents, 0, 1);    
    $charset[2] = substr($contents, 1, 1);    
    $charset[3] = substr($contents, 2, 1);    
    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {    
        if ($auto == 1) {    
            $rest = substr($contents, 3);    
            rewrite ($filename, $rest);    
            return ("<font color=red>BOM found, automatically removed._<a href=http://www.111cn.net>http://www.111cn.net/nokia/c6/</a></font>");    
        } else {    
            return ("<font color=red>BOM found.</font>");    
        }    
    }    
    else return ("BOM Not Found.");    
}    
function rewrite ($filename, $data) {    
    $filenum = fopen($filename, "w");    
    flock($filenum, LOCK_EX);    
    fwrite($filenum, $data);    
    fclose($filenum);    
}    
?>  

这样我们只要运行就可以替换指定目录所所有文件的所有内容,这个还是特别方便的。

本文章不但要讲述了关于正则达式而且还讲述了关于邮箱正则的构成用法详解,有需要了解的朋友可以参考一下,同时我们也提供了多种不同的邮箱验证实例.

正则表达式了

 代码如下 复制代码
^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$

在这段正则表达式中,“+”表示前面的字符串连续出现一个或多个;“^”表示下一个字符串必须出现在开头,“$”表示前一个字符串必须出现在结尾;
“.”也就是“.”,这里“”是转义符;“{2,3}”表示前面的字符串可以连续出现2-3次。“()”表示包含的内容必须同时出现在目标对象中。“[_.0-9a-z-]”表示包含在“_”、“.”、“-”、从a到z范围内的字母、从0到9范围内的数字中的任意字符;
这样一来,这个正则表达式可以这样翻译:
“下面的字符必须在开头(^)”、“该字符必须包含在“_”、“.”、“-”、从a到z范围内的字母、从0到9范围内的数字中([_.0-9a-z-])”、“前面这个字符至少出现一次(+)”、@、“该字符串由一个包含在从a到z范围内的一个字母、从0到9范围内的数字中的字符开头,后面跟至少一个包含在“-”、从a到z范围内任何一个字母、从0到9范围内任何一个数字中的字符,最后以.结束(([0-9a-z][0-9a-z-]+.))”、“前面这个字符至少出现一次(+)”、“从a到z范围内的字母出现2-3次,并以它结束([a-z]{2,3}$)”

 代码如下 复制代码
function is_valid_email($email, $test_mx = false)
{
    if(eregi("^([_a-z0-9-]+)(.[_a-z0-9-]+)*@([a-z0-9-]+)(.[a-z0-9-]+)*(.[a-z]{2,4})[    wind_phpcode_0    ]quot;, $email))
        if($test_mx)
        {
            list($username, $domain) = split("@", $email);
            return getmxrr($domain, $mxrecords);
        }
        else
            return true;
    else
        return false;
}

域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现 。 域名中字母不分大小写。域名最长可达60个字节(包括后缀.com、.net、.org等)。
/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?$/i;
/内容/i 构成一个不区分大小写的正则表达式;
^ 匹配开始

$ 匹配结束

[a-z] E-Mail前缀必需是一个英文字母开头

([a-z0-9]*[-_]?[a-z0-9]+)* 和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、a__aa不匹配,如果是空字符,也是匹配的,*表示0个或者多个。

*表示0个或多个前面的字符.

[a-z0-9]* 匹配0个或多个英文字母或者数字

[-_]? 匹配0个或1“-”,因为“-”不能连续出现

[a-z0-9]+ 匹配1个或多个英文字母或者数字,因为“-”不能做为结尾

@ 必需有个有@

([a-z0-9]*[-_]?[a-z0-9]+)+ 见上面([a-z0-9]*[-_]?[a-z0-9]+)*解释,但是不能为空,+表示一个或者为多个。

[.] 将特殊字符(.)当成普通字符

[a-z]{2,3} 匹配2个至3个英文字母,一般为com或者net等.

([.][a-z]{2})? 匹配0个或者1个[.][a-z]{2}(比如.cn等) 我不知道一般.com.cn最后部份是不是都是两位的,如果不是请修改{2}为{起始字数,结束字数}

完美E-Mail正则表达式,附详细讲解,请大家帮忙测试一下! 2.抽取字符串中的email:

 代码如下 复制代码
<?php
function getEmail($str) {
$pattern = "/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i";
preg_match_all($pattern,$str,$emailArr);
return $emailArr[0];
}
$emailstr = "9999@qq.com.cn俺不是米vi地方就开iid邮件列表:fuyongjie@163.com和hh@qq.com;.;;,fuyongjie.100@yahoo.com,fu-1999@sina.com";
$emailArr = getEmail($emailstr);
echo "<pre>";
print_r($emailArr);
echo "</pre>";
?>打印如下:
Array
(
[0] =>9999@qq.com.cn
[1] =>fuyongjie@163.com
[2] =>hh@qq.com
[3] =>fuyongjie.100@yahoo.com
[4] =>fu-1999@sina.com
)3.比较:第2里的正则里没有了第1的^和$;

再看实例

 代码如下 复制代码

function funcemail($str)//邮箱正则表达式
{
 return (preg_match('/^[_.0-9a-z-a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$/',$str))?true:false;
}//验证方法一

$str="qbcd@126.com.cn";
preg_match("/^[0-9a-z]+@(([0-9a-z]+)[.])+[a-z]{2,3}$/",$str,$re);
print_r($re);//邮箱验证二

if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email)) {
  echo "您的 e-mail 通过初步检查";
}//第三种邮箱验证方法

 

if (ereg("/^[a-z]([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?$/i; ",$email)){
 echo "your email address is correct!";}
    else{
 echo "please try again!";
 }

从标题来看我们知道Ckeditor不支持图片上传功能,它是需要一个组件Ckfinder才可以支持上传图片, 本文章就来详细的介绍了如何配置Ckeditor+Ckfinder实现图片上传的功能。

第一:安装配置CKEditor

在扩展CKfinder实现图片上传之前,我们先把最基本的CKeditor编辑器安装一下。

1.  将下载的ckeditor_3.4.2.zip解压,复制目录下的ckeditor文件夹至所需目录,如/admin/。

第一:安装配置CKEditor ,可改/admin/ckeditor/ckeditor.js来配置编辑器,如字体、背景色、语言

、界面高宽、编辑器按钮分布等

 代码如下 复制代码
config.language = 'en';
config.skin = 'v2';
config.uiColor = '#AADC6E';
config.toolbar = 'Basic';

….
2、官方的demo大多都喜欢用js配置editor区域,习惯写php的我就嫌麻烦,只好看内置的php类。

 代码如下 复制代码

require_once ROOTPATH . "ckeditor/ckeditor.php";
$CKEditor = new CKEditor();
$CKEditor->returnOutput = true; //设置输出可用变量的情况
$CKEditor->basePath = '/ckeditor/';//设置路径
$contentarea =  $CKEditor->editor("content", $rs['contents']); //生成一个以name为content的

textarea
 
echo $contentarea;

页面引用CKeditor,关键代码如下

 

 代码如下 复制代码

<script type="text/javascript" src="ckeditor/ckeditor.js"></script>

<textarea cols="80" name="content" rows="10"></textarea>


第二步,我们来配置安装CKfinder

CKfinder是官方组件,下载地址如下:http://ckfinder.com/download (注意:与ckeditor不是同一

网站)。

1.  将下载的ckfinder_php_2.0.1.zip 解压,复制目录下的ckfinder文件夹至编辑器目

录,/admin/ckeditor。

2、需要上传了 ,只好加入ckfinder。把ckfinder和ckeditor放在同级目录下。
打开/ckfinder/config.php,  首先设置第一个函数CheckAuthentication(),这个函数需要按照自己的

规则写,只要return  true的情况才能允许上传文件到服务器的,当然不建议直接写return true,这

将导致安全问题。可以采用session来处理比较方便。
我们可以简单的把子

config.php这样修改

 代码如下 复制代码

function CheckAuthentication()
{

return false;//改为return false
}

或者更安全的做法利用session 关于session用法 [用力点击]

 代码如下 复制代码

session_start();
function CheckAuthentication(){
    if(isset($_SESSION['UseEidtor']))
        return true;
    else
         return  false;
}

找到”$baseUrl”,这个变量定义了ckfinder文件上传的目录,将值设为”$baseurl=’../data /’,

文件上传后程序他会在此目录下自动建立相应的文件夹如image、flash等。

第三:整合,实现图片上传功能

1.  在编辑器页面头部引用ckfinder.js文件,代码如下:

 代码如下 复制代码

 <script type="text/javascript" src="ckeditor/ckfinder/ckfinder.js"></script>


下介绍两调用方法一种php

最后就是使用ckfinder

 代码如下 复制代码

require_once ROOTPATH . "ckeditor/ckeditor.php";
    require_once ROOTPATH . 'ckfinder/ckfinder.php' ;
   
     $CKEditor  = new  CKEditor();
    $CKEditor->returnOutput = true;
    $CKEditor->basePath = '/ckeditor/';
 
    CKFinder::SetupCKEditor($CKEditor, '/ckfinder/') ;//注意这里是相对路径,相对于根目录,

不能用绝对路径
 
    $contentarea =  $CKEditor->editor("content", $rs['contents']);


另一种js或html页面的修改

 代码如下 复制代码

<script type="text/javascript">
CKEDITOR.replace( 'editor1',
{
filebrowserBrowseUrl : 'ckeditor/ckfinder/ckfinder.html',
filebrowserImageBrowseUrl : 'ckeditor/ckfinder/ckfinder.html?Type=Images',
filebrowserFlashBrowseUrl : 'ckeditor/ckfinder/ckfinder.html?Type=Flash',
filebrowserUploadUrl : 'ckeditor/ckfinder/core/connector/php/connector.php?

command=QuickUpload&type=Files',
filebrowserImageUploadUrl : 'ckeditor/ckfinder/core/connector/php/connector.php?

command=QuickUpload&type=Images',
filebrowserFlashUploadUrl : 'ckeditor/ckfinder/core/connector/php/connector.php?

command=QuickUpload&type=Flash'
});
</script>

这样就大功告成了,有想知道Ckeditor Ckfinder配置图片上传功能支持javascript html和php调用的朋友可以参考一下本教程

本站原创教程转载注明来源:http://www.111cn.net/phper/php.html

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • php file_get_contents 设置代理抓取页面示例

    file_get_contents函数在php中可以直接打开本地文件也可以直接抓取远程服务器文件,如果简单的采集我们可以使用file_get_contents直接来操作,如果有防采集我们可能需要...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • php报错file_get_contents(): php_network_getaddresses问题

    本文章来为各位介绍一篇关于file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known...错误解决办法。 昨天,服务器的DN...2016-11-25
  • Photoshop枪战电影海报图片制作教程

    Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
  • js实现上传图片及时预览

    这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
  • python opencv通过4坐标剪裁图片

    图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
  • PHP file_get_contents设置超时处理方法

    file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
  • 使用PHP下载CSS文件中的图片的代码

    共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
  • PHP swfupload图片上传的实例代码

    PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • C#中图片旋转和翻转(RotateFlipType)用法分析

    这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25
  • ps怎么制作图片阴影效果

    ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
  • OpenCV如何去除图片中的阴影的实现

    这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29