VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • PHP 下载远程网页图片并且保存在本地实例

我们要取远程服务器中网页的图片然后保存到我们本地需要珍到php fopen或curl等等这类的函数,下面我给大家介绍几个常用的实例.

fopen函数实例

ob_start:打开输出缓冲

readfile:读入一个文件并写入到输出缓冲

返回从文件中读入的字节数,如果出错返回 FALSE 并且除非是以 @readfile() 形式调用,否则会显示错误信息.

ob_get_contents : Return the contents of the output buffer(返回输出缓冲的内容)

This will return the contents of the output buffer without clearing it or FALSE, if output buffering isn’t active.(如果输出缓冲没有活动(打开),则返回 FALSE)

ob_end_clean() : Clean (erase) the output buffer and turn off output buffering(清除输出缓冲)

代码如下:

  1. <?php 
  2. //URL是远程的完整图片地址,不能为空, $filename 是另存为的图片名字 
  3. //默认把图片放在以此脚本相同的目录里 
  4. function GrabImage($url,$filename=""){ 
  5.         if($url == ""){ 
  6.             return false; 
  7.         } 
  8.          
  9.         $ext=strrchr($url,"."); 
  10.          
  11.         if($ext != ".gif" && $ext != ".jpg" && $ext != ".bmp" && $ext != ".png"){ 
  12.             echo "格式不支持!"
  13.             return false; 
  14.         } 
  15.          
  16.         if($filename == ""){ 
  17.             $filename = time()."$ext"
  18.         } 
  19.          
  20.         ob_start(); 
  21.         readfile($url); 
  22.         $img=ob_get_contents(); 
  23.         ob_end_clean(); 
  24.         $size=strlen($img); 
  25.         $fp2=fopen($filename,"a"); 
  26.         if(fwrite($fp2,$img) === false){ 
  27.             echo "不能写入文件".$filename
  28.             exit(); 
  29.         }else
  30.             echo "保存图片成功!"
  31.         } 
  32.         fclose($fp2); 
  33.         return $filename
  34.          
  35.     } 
  36. //测试 
  37. GrabImage("/logo.png","as.png"); 
  38. ?> 

php下载远程图片函数,可伪造来路.

$gurl 要下载的图片地址

$rfurl 来路。如果目标图像做了防盗链设置,可以绕过。

$filename 下载图片保存的文件名,相对路径,不要用realpath

$gcookie 调整cookie 伪造的cookie

$JumpCount 跳转计数

$maxtime 最大次数

调用方法:

DownImageKeep(“http://www.baidu.com/img/baidu_jgylogo2.gif”,”http://baidu.com”,”a.gif”,”",0,10);

代码如下:

  1. function DownImageKeep($gurl$rfurl$filename$gcookie=”", $JumpCount=0, $maxtime=30) 
  2. $urlinfos = GetHostInfo($gurl); 
  3. $ghost = trim($urlinfos['host']); 
  4. if($ghost==”) 
  5. return FALSE; 
  6. $gquery = $urlinfos['query']; 
  7. if($gcookie==”" && !emptyempty($rfurl)) 
  8. $gcookie = RefurlCookie($rfurl); 
  9. $sessionQuery = “GET $gquery HTTP/1.1rn”; 
  10. $sessionQuery .= “Host: $ghostrn”; 
  11. $sessionQuery .= “Referer: $rfurlrn”; 
  12. $sessionQuery .= “Accept: */*rn”; 
  13. $sessionQuery .= “User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)rn”; 
  14. if($gcookie!=”" && !preg_match(“/[rn]/”, $gcookie)) 
  15. { 
  16. $sessionQuery .= $gcookie.”rn”; 
  17. } 
  18. $sessionQuery .= “Connection: Keep-Alivernrn”; 
  19. $errno = “”; 
  20. $errstr = “”; 
  21. $m_fp = fsockopen($ghost, 80, $errno, $errstr,10); 
  22. fwrite($m_fp,$sessionQuery); 
  23. $lnum = 0; 
  24.  
  25. //获取应答头 
  26. $m_httphead = Array(); 
  27. $httpstas = explode(” “,fgets($m_fp,256)); 
  28. $m_httphead["http-edition"] = trim($httpstas[0]); 
  29. $m_httphead["http-state"] = trim($httpstas[1]); 
  30. while(!feof($m_fp)) 
  31. { 
  32. $line = trim(fgets($m_fp,256)); 
  33. if($line == “” || $lnum>100) 
  34. { 
  35. break; 
  36. } 
  37. $hkey = “”; 
  38. $hvalue = “”; 
  39. $v = 0; 
  40. for($i=0; $i { 
  41. if($v==1) 
  42. { 
  43. $hvalue .= $line[$i]; 
  44. } 
  45. if($line[$i]==”:”) 
  46. { 
  47. $v = 1; 
  48. } 
  49. if($v==0) 
  50. { 
  51. $hkey .= $line[$i]; 
  52. } 
  53. } 
  54. $hkey = trim($hkey); 
  55. if($hkey!=”") 
  56. { 
  57. $m_httphead[strtolower($hkey)] = trim($hvalue); 
  58. } 
  59. } 
  60.  
  61. if(preg_match(“/^3/”, $m_httphead["http-state"])) 
  62. { 
  63. if(isset($m_httphead["location"]) && $JumpCount<3) { $JumpCount++; DownImageKeep($gurl,$rfurl,$filename,$gcookie,$JumpCount); } else { return FALSE; } } if(!preg_match(“/^2/”, $m_httphead["http-state"])) { return FALSE; } if(!isset($m_httphead)) { return FALSE; } $contentLength = $m_httphead['content-length']; //保存图片 $fp = fopen($filename,”w”) or die(“写入文件:{$filename} 失败!”); $i=0; $okdata = “”; $starttime = time(); while(!feof($m_fp)) { $okdata .= fgetc($m_fp); $i++; //超时退出 if(time()-$starttime>$maxtime) 
  64. { 
  65. break; 
  66. } 
  67.  
  68. //到达指定大小结束 
  69. if($i >= $contentLength) 
  70. { 
  71. break; 
  72. } 
  73. } 
  74. if($okdata!=”") 
  75. { 
  76. fwrite($fp,$okdata); 
  77. } 
  78. fclose($fp); 
  79. if($okdata==”") 
  80. { 
  81. @unlink($filename); 
  82. fclose($m_fp); 
  83. return FALSE; 
  84. } 
  85. fclose($m_fp); 
  86. return TRUE; 
  87. } 
  88. //获得网址的host和query部份 
  89. function GetHostInfo($gurl) 
  90. { 
  91. $gurl = preg_replace(“/^http:///i”, “”, trim($gurl)); 
  92. $garr['host'] = preg_replace(“//(.*)$/i”, “”, $gurl); 
  93. $garr['query'] = “/”.preg_replace(“/^([^/]*)//i”, “”, $gurl); 
  94. return $garr; 
  95. } 
  96. //获得页面返回的Cookie信息 
  97. function RefurlCookie($gurl) 
  98. { 
  99. global $gcookie,$lastRfurl; 
  100. $gurl = trim($gurl); 
  101. if(!empty($gcookie) && $lastRfurl==$gurl) 
  102. { 
  103. return $gcookie; 
  104. } 
  105. else 
  106. { 
  107. $lastRfurl=$gurl; 
  108. } 
  109. if(trim($gurl)==”) 
  110. { 
  111. return ”; 
  112. } 
  113. $urlinfos = GetHostInfo($gurl); 
  114. $ghost = $urlinfos['host']; 
  115. $gquery = $urlinfos['query']; 
  116. $sessionQuery = “GET $gquery HTTP/1.1rn”; 
  117. $sessionQuery .= “Host: $ghostrn”; 
  118. $sessionQuery .= “Accept: */*rn”; 
  119. $sessionQuery .= “User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)rn”; 
  120. $sessionQuery .= “Connection: Closernrn”; 
  121. $errno = “”; 
  122. $errstr = “”; 
  123. $m_fp = fsockopen($ghost, 80, $errno$errstr,10) or die($ghost.’ 
  124. ‘); 
  125. fwrite($m_fp,$sessionQuery); 
  126. $lnum = 0; 
  127.  
  128. //获取详细应答头 
  129. $gcookie = “”; 
  130. while(!feof($m_fp)) 
  131. $line = trim(fgets($m_fp,256)); 
  132. if($line == “” || $lnum>100) 
  133. break
  134. else 
  135. if(preg_match(“/^cookie/i”, $line)) 
  136. $gcookie = $line
  137. break
  138. fclose($m_fp); 
  139. return $gcookie
  140.  

出处:http://www.phpfensi.com/php/20140721/3832.html


相关教程