【问题标题】:PHP file existsPHP文件存在
【发布时间】:2011-10-24 00:46:12
【问题描述】:

使用 PHP 我需要确定文件是否存在。

我试过 file_exists() 但权限有限,我不相信 PHP 可以读取文件权限。该文件是一张照片,可以通过 URL 查看。

例如:http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg

我已经尝试过 is_readable() 但我的所有结果都是它不存在。

我还指出了 index.php 中的函数来测试我是否正确使用它们,并且使用 index.php 它们返回正确的预期结果。

是否有其他 PHP 函数可用于测试文件是否存在偶然性或技巧?

谢谢...

【问题讨论】:

  • 你应该使用那个函数,但我猜你做错了。是否显示警告(是否启用警告显示)?
  • 如果您在本地没有该文件的权限,那么您可以测试 URL 是否存在。
  • 您是在检查本地文件还是外部文件?

标签: php file file-exists


【解决方案1】:

我猜你可以使用 file_get_contents。失败时返回 false,成功时返回文件内容:http://php.net/manual/en/function.file-get-contents.php

【讨论】:

  • 权限是问题,如果file_exists失败,这肯定会失败。
  • 这更多是因为操作建议他正在测试外部 URL,据我所知 file_exists 只能用于具有绝对路径的本地文件
【解决方案2】:

如果您尝试检查本地文件:
file_exists() 函数对由于安全模式限制而无法访问的文件返回 FALSE。所以试试 这个:

   function my_file_exists($dir, $file)
   {
       $ret = exec("ls ".escapeshellarg($dir)." | grep ".escapeshellarg($file));
       return (!empty($ret));
   } 

【讨论】:

  • 如果您将变量传递给 shell,请使用 escapeshellarg() 以避免头痛。
【解决方案3】:

file_exists not working for me。简而言之:file_exists 只会在您的服务器上检查,它不用于检查 URL。您可以使用 curl 等并检查标题。

文档说明:

从 PHP 5.0.0 开始,这个函数也可以与一些 URL 包装器一起使用。有关哪些包装器支持 stat() 系列功能的列表,请参阅支持的协议/包装器列表。

这只是意味着它可能会起作用,但通常不会。

【讨论】:

    【解决方案4】:

    如果 PHP 没有读取文件的权限,您将无法通过 file_exists() 或 is_readable() 检查文件是否存在,因为这些函数依赖于能够在服务器上本地访问文件。

    唯一可行的解​​决方案是使用 HTTP 请求检查文件是否存在。

    Alex 的 file_get_contents() 解决方案是一种方法,但您必须检查是否

    allow_url_fopen = true

    在你的 php.ini 中,所以

    file_get_contents("http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg")

    允许从 HTTP (http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen) 检索数据。

    只要您的文件可以通过浏览器读取,您就可以检查是否存在,但您仍然需要下载整个文件,这会产生大量流量开销并且需要时间。

    我的建议是使用

    <?
    $headers = get_headers("http://www.seemeagain.com/users/1000002722/gallery_1312973080.jpg");
    
    if ($headers[0] == "HTTP/1.1 200 OK")
    {
        // Your file does exist
    }
    elseif($headers[0] == "HTTP/1.1 404 Not Found")
    {
        // Your file does not exist
    }
    else 
    {
        // Some other headers...
        highlight_string(print_r($headers,1));
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 2014-03-07
      • 2015-12-15
      • 2013-02-11
      • 2016-02-10
      • 2012-06-07
      • 1970-01-01
      • 2015-04-24
      • 2015-06-27
      相关资源
      最近更新 更多