【问题标题】:Can you use PHP's file exists on a file outside of the server?你可以使用 PHP 的文件存在于服务器之外的文件中吗?
【发布时间】: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 正在使我的页面崩溃 - 我正在编辑它的代码非常旧,所以我认为问题出在我的最后,但可能是什么原因造成的?

标签: php file-exists


【解决方案1】:

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

【讨论】:

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

两种可能的解决方案:

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

  2. 在服务器 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 吗?
        猜你喜欢
        • 2018-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-22
        • 2014-02-23
        • 1970-01-01
        相关资源
        最近更新 更多