检查该文件是否存在于不同的域而不读取它

时间:2010-11-04 09:16:04

标签: php

有没有比这更好的方法来检查文件是否存在(它位于不同的域上,因此file_exists不起作用)?

$fp = fsockopen($fileUri, 80, $errno, $errstr, 30);
if (!$fp) {
    // file exists
}
fclose($fp);

6 个答案:

答案 0 :(得分:9)

我喜欢这个。它总是很好用:

$url = "http://www.example.com/index.php";
$header_response = get_headers($url, 1);
if ( strpos( $header_response[0], "404" ) !== false )
{
  // FILE DOES NOT EXIST
}
else
{
  // FILE EXISTS!!
}

答案 1 :(得分:5)

请参阅此example及解释

$url = "http://www.example.com/index.php";
$header_response = get_headers($url, 1);
if ( strpos( $header_response[0], "404" ) !== false )
{
  // FILE DOES NOT EXIST
} 
else 
{
  // FILE EXISTS!!
}

file_get_contents("http://example.com/path/to/image.gif",0,null,0,1);

将maxlength设置为1

答案 2 :(得分:3)

您可以使用curl并检查标题以获取响应代码。

This question有一些你可以使用的例子。

使用curl时,使用curl_setopt将CURLOPT_NOBODY切换为true,以便它只下载标题而不是完整文件。例如。 curl_setopt($ch, CURLOPT_NOBODY, true);

答案 3 :(得分:3)

来自http://www.php.net/manual/en/function.fopen.php#98128

function http_file_exists($url)
{
    $f=@fopen($url,"r");
    if($f)
    {
        fclose($f);
        return true;
    }
    return false;
}

我的所有测试都显示它按预期工作。

答案 4 :(得分:3)

我会使用curl检查此标题并验证内容类型。

类似的东西:

function ExternalFileExists($location,$misc_content_type = false)
{
    $curl = curl_init($location);
    curl_setopt($curl,CURLOPT_NOBODY,true);
    curl_setopt($curl,CURLOPT_HEADER,true);
    curl_exec($curl);

    $info = curl_getinfo($curl);

    if((int)$info['http_code'] >= 200 && (int)$info['http_code'] <= 206)
    {
        //Response says ok.
        if($misc_content_type !== false)
        {
             return strpos($info['content_type'],$misc_content_type);
        }
        return true;
    }
    return false;
}

然后你可以像这样使用:

if(ExternalFileExists('http://server.com/file.avi','video'))
{

}

或者如果你不确定扩展名,那么就这样:

if(ExternalFileExists('http://server.com/file.ext'))
{

}

答案 5 :(得分:0)

怎么样

<?php
      $a = file_get_contents('http://mydomain.com/test.html');
      if ($a) echo('exists'); else echo('not exists');