1

我需要使用 PHP 检查文件是否存在于它运行的服务器之外。这个问题完美地回答了如何检查服务器上的文件:

PHP 的 file_exists() 对我不起作用?

...但我需要检查我们网络上另一台服务器上的文件与托管 PHP 的服务器上的文件。这可能吗?

4

5 回答 5

2

两种可能的解决方案:

  1. 导出服务器 2 上文件所在的文件系统/目录,以便可以将其安装在服务器 1 上。例如,您可以使用 NFS 或 CIFS (SMB/Samba)。然后你可以在你挂载文件系统的路径上使用 file_exists ,它应该像本地文件一样工作。

  2. 在服务器 2 上运行一些服务,可以检查文件是否存在。例如,您也可以在服务器 2 上安装网络服务器并编写一个简短的 PHP 脚本来执行 file_exists,然后例如仅返回 1 或 0 作为文本。然后,您可以从服务器 1 请求该 URL 并处理结果。

于 2013-09-20T11:39:32.127 回答
2

可能以间接的方式。你总是可以发送一个 HEAD 请求,看看你是否从服务器获取了 HTTP 200 以获取所请求的资源。希望能帮助到你。

于 2013-09-20T11:37:35.487 回答
0

没有办法检查服务器上是否存在文件并且 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;
 }

你也可以使用它。

于 2013-09-20T11:49:30.233 回答
0

您可以尝试(仅适用于小文件!):

$file = file_get_contents('http://www.yourdomain.com/yourfile');
if (!empty($file)) {
    // there is a file
}
于 2013-09-20T11:46:03.663 回答
0

尝试使用curllike,

$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);
于 2013-09-20T11:38:55.917 回答