PHP 判断远程文件是否存在有哪几种方法?

答案

PHP判断远程文件是否存在主要有3方法,

  • file_get_contents方法。
  • Curl组件。
  • fwritefgetsfclose方法。

答案解析

方法一、file_get_contents

这个方法需要开启allow_url_fopen

  1. <?php
  2. $url = "http://cn.wordpress.org/wordpress-3.3.1-zh_CN.zip";
  3. $fileExists = @file_get_contents($url, null, null, -1, 1) ? true : false;
  4. echo $fileExists; //返回1,就说明文件存在。

方法二、curl组建

该方法需要服务器支持Curl组件:

  1. <?php
  2. function check_remote_file_exists($url) {
  3. $curl = curl_init($url); // 不取回数据
  4. curl_setopt($curl, CURLOPT_NOBODY, true);
  5. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // 发送请求
  6. $result = curl_exec($curl);
  7. $found = false; // 如果请求没有发送失败
  8. if ($result !== false) {
  9. /** 再检查http响应码是否为200 */
  10. $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
  11. if ($statusCode == 200) {
  12. $found = true;
  13. }
  14. }
  15. curl_close($curl);
  16. return $found;
  17. }
  18. $url = "http://cn.wordpress.org/wordpress-3.3.1-zh_CN.zip";
  19. echo check_remote_file_exists($url); // 返回1,说明存在。

方法三、fwrite、fgets、fclose

  1. <?php
  2. /*
  3. 函数:remote_file_exists
  4. 功能:判断远程文件是否存在
  5. 参数: $url_file -远程文件URL
  6. 返回:存在返回true,不存在或者其他原因返回false
  7. */
  8. function remote_file_exists($url_file){
  9. //检测输入
  10. $url_file = trim($url_file);
  11. if (empty($url_file)) { return false; }
  12. $url_arr = parse_url($url_file);
  13. if (!is_array($url_arr) || empty($url_arr)){return false; }
  14. //获取请求数据
  15. $host = $url_arr['host'];
  16. $path = $url_arr['path'] ."?".$url_arr['query'];
  17. $port = isset($url_arr['port']) ?$url_arr['port'] : "80";
  18. //连接服务器
  19. $fp = fsockopen($host, $port, $err_no, $err_str,30);
  20. if (!$fp){ return false; }
  21. //构造请求协议
  22. $request_str = "GET ".$path."HTTP/1.1";
  23. $request_str .= "Host:".$host."";
  24. $request_str .= "Connection:Close";
  25. //发送请求
  26. fwrite($fp,$request_str);
  27. $first_header = fgets($fp, 1024);
  28. fclose($fp);
  29. //判断文件是否存在
  30. if (trim($first_header) == ""){ return false;}
  31. if (!preg_match("/200/", $first_header)){
  32. return false;
  33. }
  34. return true;
  35. }

测试代码:

  1. <?php
  2. $str_url = 'http://cn.wordpress.org/wordpress-3.3.1-zh_CN.zip';
  3. $exits = remote_file_exists($str_url);
  4. echo $exists ? "Exists" : "Not exists";