我正在尝试使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 - .");
始终遵循其他。 我还能尝试什么?
答案 0 :(得分:0)
首先,您必须阅读file_exists()
的文档如果没有发现错误,请使用scandir()
检查文件夹文件例如:
print_r(scandir('/a/'));
然后您会看到文件不存在。
您的问题可能是其中之一:
答案 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 更挑剔。