当前位置:首页 > PHP教程 > php图像处理 > 列表

PHP判断远程图片是否存在的几种方法

发布:smiling 来源: PHP粉丝网  添加日期:2020-11-27 15:57:26 浏览: 评论:0 

这篇文章主要介绍了PHP判断远程图片是否存在的几种方法,需要的朋友可以参考下,在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器),代码如下:

  1. //方法一 
  2. function file_exists($url
  3. $ch = curl_init(); 
  4. curl_setopt($ch, curlopt_url,$url); 
  5. curl_setopt($ch, curlopt_nobody, 1); // 不下载 
  6. curl_setopt($ch, curlopt_failonerror, 1); 
  7. curl_setopt($ch, curlopt_returntransfer, 1); 
  8.  
  9. if(curl_exec($ch)!==false) 
  10. return true; 
  11. else 
  12. return false; 
  13.  
  14. //方法二 
  15. function file_exists2($url
  16. if(file_get_contents($url,0,null,0,1)) 
  17. return 1; 
  18. else 
  19. return 0; 
  20. //方法三 
  21. function file_exists($url) { 
  22. $curl = curl_init($url); 
  23. // 不取回数据 
  24. curl_setopt($curl, CURLOPT_NOBODY, true); 
  25. // 发送请求 
  26. $result = curl_exec($curl); 
  27. $found = false; 
  28. // 如果请求没有发送失败 
  29. if ($result !== false) { 
  30. // 再检查http响应码是否为200 

方法一无论图片在不在都是返回FALSE;

方法二windows下可行,LINUX下无论图片在不在都返加TRUE;

方法三应该是最合适的

另外:用get_headers() 方法存在效率问题,建议不使用作为此解决方案

fsockopen版:

  1. $url = "http://www.baidu.com/img/baidu_sylogo1.gif"
  2.  
  3.   $info = parse_url($url); 
  4.   $fp = fsockopen($info['host'], 80,$errno$errstr, 30); 
  5.   fputs($fp,"GET {$info['path']} HTTP/1.1\r\n"); 
  6.   fputs($fp"Host: {$info['host']}\r\n"); 
  7.   fputs($fp"Connection: close\r\n\r\n"); 
  8.   $headers = array(); 
  9.   while(!feof($fp)) { 
  10.   $line = fgets($fp); 
  11.   if($line != "\r\n") { 
  12.   $headers[] = $line
  13.   }else { 
  14.   break
  15.   } 
  16.   } 
  17.  
  18.   echo "<pre>"
  19.   print_r($headers); 

通过http状态码来判断文件是否存在,比如,响应 302,301,404等都为不存在,如果是200,304,等可以视为文件存在。

fopen()方法:

  1. <?php 
  2.     $url = 'http://www.test.com/images/test.jpg'
  3.  
  4.     if( @fopen$url'r' ) ) 
  5.     { 
  6.         echo 'File Exits'
  7.     } 
  8.     else 
  9.     { 
  10.         echo 'File Do Not Exits'
  11.     } 
  12. ?> 

CURL方法:

  1. <?php 
  2.     $url2 = 'http://www.test.com/test.jpg'
  3.  
  4.     $ch = curl_init(); 
  5.     $timeout = 10; 
  6.     curl_setopt ($ch, CURLOPT_URL, $url2); 
  7.     curl_setopt($ch, CURLOPT_HEADER, 1); 
  8.     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
  9.     curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
  10.  
  11.     $contents = curl_exec($ch); 
  12.     //echo $contents; 
  13.     if (preg_match("/404/"$contents)){ 
  14.         echo '文件不存在'
  15.     } 
  16.     ?> 

Tags: PHP远程图片

分享到: