有没有比这更好的方法来检查文件是否存在(它位于不同的域上,因此file_exists不起作用)?
$fp = fsockopen($fileUri, 80, $errno, $errstr, 30);
if (!$fp) {
// file exists
}
fclose($fp);
答案 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');