探讨php file_exists()函数能否检查远程(网络)文件是否存在

时间:2016-08-30
php file_exists()函数用于检查文件或目录是否存在,如果要检查的文件在本地服务器,该函数肯定可以正确获得结果,但如果要检查的文件是远程文件或网络文件,file_exists函数能否正确获得结果呢?

php中,如果我们想判断文件是否存在,可以使用函数file_exists(),该函数只需要一个文件名参数即可。

// Returns true if the file exists
file_exists( $filename );

此函数不仅对可以检查文件是否存在,也可以用来检测目录是否存在,你可以向该函数传递一个文件名或者目录名,如果这个目录或文件存在,file_exists()函数将返回true。

<?php
$filename = '/path/to/foo.txt';
/*  http://www.manongjc.com/article/1420.html */
if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}
?>

但是file_exists函数也有一个缺陷,有人曾试图使用该函数检查一个一个远程文件是否存在(使用URL)。但是,如果你尝试搜索文件使用一个URL此功能将无法正常工作,该函数将始终返回false。

如果你想检查远程URL,你需要做一个HTTP请求并检查一下HTTP头状态信息。

get_headers()函数检查远程文件是否存在

为了得到一个远程文件的头信息,那么你可以使用PHP函数get_headers() 。这需要你传入URL参数,它会以数组的形式返回头信息。该数组的第一个键是我们需要的值(HTTP报头的状态)。如果该文件存在的状态会返回一个200的状态码,如果远程文件不存在,那么状态码就会返回一个404错误。

这意味着我们可以使用get_headers()函数来检查远程问价是否存在。

$file_headers = @get_headers($url);
if($file_headers[0] == 'HTTP/1.0 404 Not Found')
{
   $file_exists = false;
} else {
   $file_exists = true;
}