你可以使用 PHP 的文件存在于服务器之外的文件中吗?

Posted

技术标签:

【中文标题】你可以使用 PHP 的文件存在于服务器之外的文件中吗?【英文标题】:Can you use PHP's file exists on a file outside of the server? 【发布时间】:2013-09-25 18:48:36 【问题描述】:

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

PHP's file_exists() will not work for me?

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

【问题讨论】:

查看se1.php.net/file_exists 并阅读“Fabrizio(bibivu dot com 的员工)”的评论,他编写了一个用于检查 URL 是否存在的函数。 没试过这个,但是你能不能用一个cURL来看看它是否存在(假设它是一个URL,如果不是,你应该添加是否允许你浏览文件结构您自己的其他服务器。 这取决于访问协议。使用 HTTP,可以选择 cURL,使用 sftp 或 ssh - 它是 ssh2_,使用 ftp 是 ftp_ 从 PHP 5.0.0 开始,这个函数也可以与一些 URL 包装器一起使用。见php.net/file_exists cURL 正在使我的页面崩溃 - 我正在编辑它的代码非常旧,所以我认为问题出在我的最后,但可能是什么原因造成的? 【参考方案1】:

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

【讨论】:

但是会检查url是否存在 它不会检查 URL。例如,Web 浏览器的工作方式。这些如何向我们显示 404 页?对于每个资源(例如 CSS 文件、图像、JS 等),Web 浏览器会获取 HTTP 响应代码(如 200、401、404、500、301、302 等)。根据服务器的响应,我们可以看到渲染的页面和资源。希望对您有所帮助。【参考方案2】:

两种可能的解决方案:

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

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

【讨论】:

【参考方案3】:

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

$file = file_get_contents('http://www.yourdomain.com/yourfile');
if (!empty($file)) 
    // there is a file

【讨论】:

【参考方案4】:

没有办法检查服务器上是否存在文件,并且无法 100% 确认这是真的。因为文件权限。

您可以尝试下载该文件,当它有权读取时,您可以使用 fopen() file_get_contents() 等函数。

您也可以在 http 端口上打开连接并检查答案是否为 200。如果是,则文件存在。

如果你想使用 fopen 和 file_get_contents 你应该检查 allow_url_fopen 是否设置为 TRUE

file_exists() page in manual上有代码:

 $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;
 

你也可以使用它。

【讨论】:

【参考方案5】:

尽量用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);

【讨论】:

Ajax 检查外部源?你听说过 SOP 吗?

以上是关于你可以使用 PHP 的文件存在于服务器之外的文件中吗?的主要内容,如果未能解决你的问题,请参考以下文章

2个java项目如何访问一个独立于项目之外的公有文件夹?

PHP file_exists 在文档根目录之外不起作用

如何在 PHP 中检查文件是不是存在于目录中?

如果在文件末尾省略PHP块的结束标记,是否会删除任何换行符或空格(如果存在于相应的文件中)?

ksweb 1010错误

在 php 和 html 中没有文件或数据库的页面查看次数