PHP:file_exists始终返回FALSE

时间:2018-12-04 17:09:23

标签: php file exists

背景:

我正在尝试使PDF文件对我的用户可用,但对其他用户不可用。建议似乎是将这些放在网站根目录之上,但在网站根目录之下。第一步是测试文件是否存在,并且结果始终为FALSE。 问题:为什么file_exists总是返回false? 尝试过的事情  1.在Web根目录中创建名为“ a”的目录(以避免拼写错误)。 file_exists(“ / a /”)为假 尽管文件存在,但file_exists(“ / a / info.pdf”)为false  2. clearstatcache();在file_exists之前  3.在root.php中添加allow_url_fopen = on

enter code here

  clearstatcache();  
  $full_path = '/a/info.pdf';  // absolute physical path to file below web root.
  if ( file_exists($full_path) )
     {
     $mimetype = 'application/pdf';

     header('Cache-Control: no-cache');
     header('Cache-Control: no-store');
     header('Pragma: no-cache');
     header('Content-Type: ' . $mimetype);
     header('Content-Length: ' . filesize($full_path));

     $fh = fopen($full_path,"rb");
     while (!feof($fh)) { print(fread($fh, filesize($full_path))); }
     fclose($fh);
     }
   else die("File does not exist on the server - .");

始终遵循其他。 我还能尝试什么?

3 个答案:

答案 0 :(得分:0)

首先,您必须阅读file_exists()

的文档

如果没有发现错误,请使用scandir()

检查文件夹文件

例如:

print_r(scandir('/a/'));

然后您会看到文件不存在。

您的问题可能是其中之一:

  1. 路径问题
  2. 文件名问题

答案 1 :(得分:0)

当您像使用 /a/file.pdf 一样使用完整路径时,实际上是试图从整个服务器的根文件夹中获取文件,而不是从服务器中的帐户DOCUMENT_ROOT中获取文件。

例如:

您拥有帐户,公共文件夹为:

/home/{ACCOUNT_NAME}/public_html/index.php

因此,当您尝试“ /a/file.pdf”时,您不会得到:

/home/{ACCOUNT_NAME}/a/file.pdf

您只需要在帐户中定义和检查绝对路径,

例如,如我所写,请使用完整路径登录您的帐户:

/home/{ACCOUNT_NAME}/a/file.pdf

,或者如果您尝试使用index.php文件,甚至使用相对路径:

../a/file.pdf

如果您不知道帐户的完整路径,

查看您拥有的内容:$ _SERVER ['DOCUMENT_ROOT']变量

答案 2 :(得分:0)

如果在文件名末尾添加查询字符串,file_exists 也将返回 false。

人们经常在图像文件名的末尾附加一个随机生成的值,以确保浏览器不会从缓存中获取图像(以防刚刚上传了同名的新图像)。

例如,如果您的文件名为“images/staff/staff1.jpg

file_exists("images/staff/staff1.jpg") // Returns true
file_exists("images/staff/staff1.jpg?21545884")  // Returns false

img 标签将接受任一字符串为有效,但 file_exists 更挑剔。