php采集内容中带有图片地址的远程图片并保存的方法
本文实例讲述了php采集内容中带有图片地址的远程图片并保存的方法。分享给大家供大家参考。具体实现方法如下:
functionmy_file_get_contents($url,$timeout=30){ if(function_exists('curl_init')) { $ch=curl_init(); curl_setopt($ch,curlopt_url,$url); curl_setopt($ch,curlopt_returntransfer,1); curl_setopt($ch,curlopt_connecttimeout,$timeout); $file_contents=curl_exec($ch); curl_close($ch); } elseif(ini_get('allow_url_fopen')==1||strtolower(ini_get('allow_url_fopen'))=='on') { $file_contents=@file_get_contents($url); } else { $file_contents=''; } return$file_contents; }
functionget_remote($body,$title){ $img_array=array(); $img_path=realpath("../../../upfile/news/").'/'.date("y/m/d/");//采集远程图片保存地址 //die($img_path); $img_rpath='/upfile/news/'.date("y/m/d/"); //设置访问地址 $body=stripslashes(strtolower($body)); preg_match_all("/(src|src)=["|'|]{0,}(http://(.*).(gif|jpg|jpeg|png))/isu",$body,$img_array); $img_array=array_unique($img_array[2]); foreach($img_arrayas$key=>$value){ $get_file=my_file_get_contents($value,60); $filetime=time(); $filename=date("ymdhis",$filetime).rand(1,999).'.'.substr($value,-3,3); if(emptyempty($get_file)){ @sleep(10); $get_file=my_file_get_contents($value,30); if(emptyempty($get_file)){ $body=preg_replace("/".addcslashes($value,"/")."/isu",'/notfound.jpg',$body); continue; } } if(!emptyempty($get_file)){ if(mkdirs($img_path)) { $fp=fopen($img_path.$filename,"w"); if(fwrite($fp,$get_file)){ $body=preg_replace("/".addcslashes($value,"/")."/isu",$img_rpath.$filename,$body); } fclose($fp); @sleep(6); } } } $body=str_replace("<img","<img",$body); return$body; } functionmkdirs($dir) { if(!is_dir($dir)){ if(!mkdirs(dirname($dir))){ returnfalse;} if(!mkdir($dir,0777)){ returnfalse;} } returntrue; } //用法如下: $str='fasfsdafsa<imgsrc=http://filesimg.xxxx.com/2010/03/2010062300391582.jpg/>'; echoget_remote($str,'图片');
希望本文所述对大家的php程序设计有所帮助。