我需要使用 PHP 来检查文件是否存在于运行它的服务器之外。这个问题完美地回答了如何检查服务器上的文件:
PHP 的 file_exists() 对我不起作用?
。但是我需要检查我们网络上与托管 PHP 的不同服务器上的文件。这可能吗?
可能以间接方式。您始终可以发送 HEAD 请求,并查看是否从服务器获取所请求资源的 HTTP 200。希望对您有所帮助。
两种可能的解决方案:
-
导出文件驻留在服务器 2 上的文件系统/目录,以便可以在服务器 1 上挂载该文件。例如,您可以使用NFS或CIFS(SMB/Samba)。然后,您可以在挂载文件系统的路径上使用file_exists,它应该像本地文件一样工作。
-
在服务器 2 上运行一些可以检查文件存在的服务。 例如,您也可以在服务器 2 上安装一个 Web 服务器,并编写一个简短的 PHP 脚本来执行file_exists,然后例如仅返回 1 或 0 作为文本。然后,您可以从服务器 1 请求该 URL 并处理结果。
你可以试试(只适用于小文件!
$file = file_get_contents('http://www.yourdomain.com/yourfile');
if (!empty($file)) {
// there is a file
}
没有办法检查服务器上是否存在文件,并且 100% 这是真的。因为文件权限。
您可以尝试下载文件,当它有权被读取时,您可以使用 fopen() file_get_contents() 等函数。
您也可以在http端口上打开连接并检查答案是否为200。如果是这样,则文件存在。
如果要使用 fopen 和 file_get_contents,则应检查allow_url_fopen是否设置为 TRUE。
在手册的file_exists()页面上有代码:
$file = 'http://www.domain.com/somefile.jpg';
$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
您也可以使用它。
尝试使用curl
,例如,
$ch = curl_init("http://www.example.com/file.jpg");
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// $retcode > 400 -> not found, $retcode = 200, found.
curl_close($ch);