>백엔드 개발 >PHP 튜토리얼 >PHP에 원격 이미지가 존재하는지 확인하는 방법

PHP에 원격 이미지가 존재하는지 확인하는 방법

WBOY
WBOY원래의
2016-07-25 09:13:081017검색

说明:在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器)。

例子,判断远程图片是否存在的多种方法。

  1. //方法一

  2. function file_exists($url)
  3. {
  4. $ch = curl_init();
  5. curl_setopt($ch, curlopt_url,$url);
  6. curl_setopt($ch, curlopt_nobody, 1); // 不下载
  7. curl_setopt($ch, curlopt_failonerror, 1);
  8. curl_setopt($ch, curlopt_returntransfer, 1);

  9. if(curl_exec($ch)!==false)

  10. return true;
  11. else
  12. return false;
  13. }

  14. //方法二

  15. function file_exists2($url)
  16. {
  17. if(file_get_contents($url,0,null,0,1))
  18. return 1;
  19. else
  20. return 0;
  21. }
  22. //方法三
  23. function file_exists($url) {
  24. $curl = curl_init($url);
  25. // 不取回数据
  26. curl_setopt($curl, CURLOPT_NOBODY, true);
  27. // 发送请求
  28. $result = curl_exec($curl);
  29. $found = false;
  30. // 如果请求没有发送失败
  31. if ($result !== false) {
  32. // 再检查http响应码是否为200
  33. }

复制代码

代码说明: 方法一,无论图片在不在都是返回FALSE; 方法二,windows下可行,LINUX下无论图片在不在都返加TRUE; 方法三,应该是最合适的 另外:用get_headers() 方法存在效率问题,建议不使用作为此解决方案。

fsockopen版:

  1. $url = "http://www.baidu.com/img/baidu_sylogo1.gif";

  2. $info = parse_url($url);

  3. $fp = fsockopen($info['host'], 80,$errno, $errstr, 30);
  4. fputs($fp,"GET {$info['path']} HTTP/1.1rn");
  5. fputs($fp, "Host: {$info['host']}rn");
  6. fputs($fp, "Connection: closernrn");
  7. $headers = array();
  8. while(!feof($fp)) {
  9. $line = fgets($fp);
  10. if($line != "rn") {
  11. $headers[] = $line;
  12. }else {
  13. break;
  14. }
  15. }

  16. echo "

    ";
  17. print_r($headers);
复制代码

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

  1. $url = 'http://www.test.com/images/test.jpg';

  2. if( @fopen( $url, 'r' ) )

  3. {
  4. echo 'File Exits';
  5. }
  6. else
  7. {
  8. echo 'File Do Not Exits';
  9. }
  10. ?>

复制代码

2,CURL方法:

  1. $url2 = 'http://www.test.com/test.jpg';

  2. $ch = curl_init();

  3. $timeout = 10;
  4. curl_setopt ($ch, CURLOPT_URL, $url2);
  5. curl_setopt($ch, CURLOPT_HEADER, 1);
  6. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

  8. $contents = curl_exec($ch);

  9. //echo $contents;
  10. if (preg_match("/404/", $contents)){
  11. echo '文件不存在';
  12. }
  13. ?>

复制代码

以上介绍的几种判断远程图片是否存在的方法与例子,是近期小编见过的最实用,也是最全面的检测远程文件的例子,所以推荐给程序员之家的各位朋友。



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.