php判断远程图片是否存在的多种方法

凨影 828

php判断远程图片是否存在的多种方法
  1. <?php
  2. //方法一
  3. function file_exists($url){
  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. //方法二
  16. function file_exists2($url){
  17. if(file_get_contents($url,0,null,0,1)){
  18. return 1;
  19. }else{
  20. return 0;
  21. }
  22. }
  23. //方法三
  24. function file_exists($url){
  25. $curl = curl_init($url);
  26. // 不取回数据
  27. curl_setopt($curl, CURLOPT_NOBODY, true);
  28. // 发送请求
  29. $result = curl_exec($curl);
  30. $found = false;
  31. // 如果请求没有发送失败
  32. if($result !== false){
  33. // 再检查http响应码是否为200
  34. }
  35. }
  36. ?>
代码说明:

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

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

方法三,应该是最合适的

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

fsockopen版:
  1. <?php
  2. $url = "http://www.baidu.com/img/baidu_sylogo1.gif";
  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. echo "<pre>";
  18. print_r($headers);
  19. ?>

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

1,fopen()方法:

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

2,CURL方法:

  1. <?php
  2. $url2 = "http://www.test.com/test.jpg";
  3. $ch = curl_init();
  4. $timeout = 10;
  5. curl_setopt($ch, CURLOPT_URL, $url2);
  6. curl_setopt($ch, CURLOPT_HEADER, 1);
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  8. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  9. $contents = curl_exec($ch);
  10. //echo $contents;
  11. if (preg_match("/404/", $contents)) {
  12. echo "文件不存在";
  13. }
  14. ?>
联系QQ:77798085 赞助请点这里
管理员回复
    全部回复 (10)
    • dasccc 2020-5-3
      2
      在下对你的景仰之情有如滔滔长江之水,连绵不绝……又如黄河泛滥,一发不可收拾……
      亚太地区
      这个人很有个性,连签名都没有!
    • 那个小子 2020-5-4
      3
      你就是我心中的那首忐忑,总是让我惊心动魄。
      亚太地区
      这个人很有个性,连签名都没有!
    • 8783461167 2020-5-5
      4
      与人为善, 好运常伴!
      亚太地区
      这个人很有个性,连签名都没有!
    • sqhua 2020-5-6
      5
      赠人玫瑰, 手留余香!
      亚太地区
      这个人很有个性,连签名都没有!
    • 7758321 2020-5-6
      6
      心情不好,来杯板蓝根!
      亚太地区
      这个人很有个性,连签名都没有!
    • 李香兰 2020-5-14
      7
      顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶!
      亚太地区
      这个人很有个性,连签名都没有!
    • 冯伦全 2020-6-3
      8
      心随我动,想回就回。
      亚太地区
      这个人很有个性,连签名都没有!
    • zhou 2020-6-7
      9
      沙发我没有,板凳我没有,板也没有,只好站在后面排队支持!
      亚太地区
      这个人很有个性,连签名都没有!
    • 百万战神 2020-6-17
      10
      在下对你的景仰之情有如滔滔长江之水,连绵不绝……又如黄河泛滥,一发不可收拾……
      亚太地区
      这个人很有个性,连签名都没有!
    • shenzhen20123 2020-6-18
      11
      顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶!
      亚太地区
      这个人很有个性,连签名都没有!