0

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

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

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

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

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

是否有不同的 PHP 函数可以用来测试文件是否存在偶然性或技巧?

谢谢你...

4

4 回答 4

1

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

于 2011-08-10T11:55:42.073 回答
0

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

   function my_file_exists($dir, $file)
   {
       $ret = exec("ls ".escapeshellarg($dir)." | grep ".escapeshellarg($file));
       return (!empty($ret));
   } 
于 2011-08-10T11:57:14.823 回答
0

请参阅file_exists 不适合我。简而言之:file_exists 只会检查您的服务器,它不用于检查 URL。您可以使用 curl 等并检查标题。

该文档指出:

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

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

于 2011-08-10T11:59:35.643 回答
0

如果 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));
}

?>
于 2011-08-10T13:27:36.060 回答