首页 > 开发 > PHP > 正文

php将远程图片保存到本地服务器的实现代码

2024-05-04 23:38:33
字体:
来源:转载
供稿:网友

有些时候我们想保存一些漂亮图片,但又不想手动去保存下来,尤其是大批量的存储,这个时候我们需要写一段程序来帮助我们完成这个工作,本文介绍了php如何将远程图片本地化,需要的朋友可以参考下

php如何将远程图片本地化,本文分享了实现代码

 

 
  1. <?php  
  2. //站点根目录  
  3. $cfg_basedir = dirname(__FILE__);  
  4. //停建目录属性  
  5. $cfg_dir_purview ='0755';  
  6. /*Get请求远程内容函数*/ 
  7. $cookie_file = dirname(__FILE__).'/cookie.txt'//COOKIE存放地址  
  8. function pget($url,$ref=false,$head=false){  
  9. $curl = curl_init(); // 启动一个CURL会话  
  10. curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址  
  11. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查  
  12. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在  
  13. curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器  
  14. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转  
  15. if($ref){ curl_setopt($curl, CURLOPT_REFERER, $ref);//带来的Referer  
  16. }else{  
  17. curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer  
  18. }  
  19. curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求  
  20. curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']); // 存放Cookie信息的文件名称  
  21. curl_setopt($curl, CURLOPT_COOKIEFILE,$GLOBALS ['cookie_file']); // 读取上面所储存的Cookie信息  
  22. curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环  
  23. curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容  
  24. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回  
  25. $tmpInfo = curl_exec($curl); // 执行操作  
  26. if (curl_errno($curl)) {  
  27. echo 'Errno'.curl_error($curl);  
  28. }  
  29. if($head){ $data['head']=curl_getinfo($curl);}  
  30. curl_close($curl); // 关键CURL会话  
  31. $data['data']=$tmpInfo;  
  32. return $data// 返回数据  
  33. }  
  34.  
  35.  
  36. /**  
  37. * 创建所有目录  
  38.  
  39. * @param string $truepath 真实地址  
  40. * @param string $mmode 模式  
  41. * @return bool  
  42. */ 
  43. if ( ! function_exists('MkdirAll'))  
  44. {  
  45. function MkdirAll($truepath)  
  46. global $cfg_dir_purview;  
  47. if(!file_exists($truepath))  
  48. {  
  49. mkdir($truepath$cfg_dir_purview);  
  50. chmod($truepath$cfg_dir_purview);  
  51. return true;  
  52. }  
  53. else 
  54. {  
  55. return true;  
  56. }  
  57. }  
  58. }  
  59. /**  
  60. * 获得文章body里的外部资源  
  61.  
  62. * @access public  
  63. * @param string $body 文档内容  
  64. * @return string  
  65. */ 
  66. function GetCurContent($body)  
  67. {  
  68. global $cfg_multi_site,$cfg_basehost,$cfg_basedir,$cfg_image_dir,$arcID,$cuserLogin,$dsql;  
  69. $cfg_uploaddir = '/c';  
  70. $basehost = "http://".$_SERVER["HTTP_HOST"];  
  71.  
  72. $img_array = array();  
  73. preg_match_all("/src=[/"|'|/s]{0,}(http:////([^>]*)/.(gif|jpg|png))/isU",$body,$img_array);  
  74.  
  75. $img_array = array_unique($img_array[1]);  
  76. $imgUrl = $cfg_uploaddir.'/'.date("ymd", time());  
  77. $imgPath = $cfg_basedir.$imgUrl;  
  78. if(!is_dir($imgPath.'/'))  
  79. {  
  80. MkdirAll($imgPath$GLOBALS['cfg_dir_purview']);  
  81. CloseFtp();  
  82. }  
  83. $milliSecond = date('His',time());  
  84. foreach($img_array as $key=>$value)  
  85. {  
  86. if(preg_match("#".$basehost."#i"$value))  
  87. {  
  88. continue;  
  89. }  
  90. if(preg_match("#".$basehost."#i"$value))  
  91. {  
  92. continue;  
  93. }  
  94. if(!preg_match("#^http:////#i"$value))  
  95. {  
  96. continue;  
  97. }  
  98.  
  99. $http=pget($value,'$value',true);  
  100. $itype=($http['head']['content_type']);  
  101. if(!preg_match("#/.(jpg|gif|png)#i"$itype))  
  102. {  
  103. if($itype=='image/gif')  
  104. {  
  105. $itype = ".gif";  
  106. }  
  107. else if($itype=='image/png')  
  108. {  
  109. $itype = ".png";  
  110. }  
  111. else 
  112. {  
  113. $itype = '.jpg';  
  114. }  
  115. }  
  116. $milliSecondN = rand(1000,9999).rand(1000,9999);  
  117. $value = trim($value);  
  118. $rndFileName = $imgPath.'/'.$milliSecondN.'-'.$key.$itype;  
  119. $fileurl = $imgUrl.'/'.$milliSecondN.'-'.$key.$itype;  
  120.  
  121. $tp = fopen($rndFileName'wb');  
  122. fwrite($tp$http['data']);  
  123. fclose($tp);  
  124.  
  125. if(file_exists($cfg_basedir.$fileurl))  
  126. {  
  127. $info = '';  
  128. $imginfos = GetImageSize($rndFileName$info);  
  129. $fsize = filesize($rndFileName);  
  130. $body = str_replace($value$fileurl$body);  
  131.  
  132. }  
  133. }  
  134. return $body;  
  135. }  
  136.  
  137. //调用方式  
  138. echo GetCurContent($body);  

以上就是实现远程图片本地化的全部代码,希望对大家的学习有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表