你可以使用 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 的文件存在于服务器之外的文件中吗?的主要内容,如果未能解决你的问题,请参考以下文章