如何检查外部服务器上是否存在文件

时间:2010-02-18 12:19:56

标签: php

如何检查外部服务器上是否存在文件?我有一个网址“http://logs.com/logs/log.csv”,我在另一台服务器上有一个脚本来检查这个文件是否存在。我试过了

$handle = fopen("http://logs.com/logs/log.csv","r");
if($handle === true){
return true;
}else{
return false;
}

if(file_exists("http://logs.com/logs/log.csv")){
return true;
}else{
return false;
}

这些方法不起作用

4 个答案:

答案 0 :(得分:10)

function checkExternalFile($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $retCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return $retCode;
}

$fileExists = checkExternalFile("http://example.com/your/url/here.jpg");

// $fileExists > 400 = not found
// $fileExists = 200 = found.

答案 1 :(得分:3)

  1. 确保错误报告已开启。

  2. 使用if($handle)

  3. 检查allow_url_fopen是否属实。

  4. 如果这些都无效,请使用this method on the file_exists page

答案 2 :(得分:3)

这应该有效:

$contents = file_get_contents("http://logs.com/logs/log.csv");

if (strlen($contents))
{
  return true; // yes it does exist
}
else
{
  return false; // oops
}

注意:这假定文件不为空

答案 3 :(得分:1)

  <?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 4file dir);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

    $data = curl_exec($ch);
    curl_close($ch);

    preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches); //check for HTTP headers

    $code = end($matches[1]);

    if(!$data) 
    {
        echo "file could not be found";
    } 
    else 
    {
        if($code == 200) 
        {
            echo "file found";
        } 
        elseif($code == 404) 
        {
            echo "file not found";
        }
    }
  ?>