【问题标题】:Feed file outside of public_htmlpublic_html 之外的提要文件
【发布时间】:2011-12-14 10:58:58
【问题描述】:

我无法从“public_html”外部向用户上传文件,这是每个人都可以通过 http 访问的文件夹。前任。 / 之后的 www.website.com/everyhting 是 public_html。我相信你们都知道我指的是什么。

所以我有这个脚本应该从(服务器视角)/images/protected/ 读取文件(sample.pdf),但 PHP 找不到我的文件。我做错了吗?

<?php
$file = '/images/protected/sample.pdf';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
} else {
    echo "404 - FILE NOT FOUND!<br />\n";
    echo "File: $file";
}
?>

每次执行此脚本时,我都会得到 404 - FILE NOT FOUND!&lt;br /&gt;\n 而不是文件下载。

【问题讨论】:

  • 你确定那是正确的路径吗?一个名为“images”的目录会在根目录中,这似乎很奇怪。
  • httpd 进程是否有权查看或读取该文件?
  • 他可能列出的是绝对网络路径,而不是绝对系统路径。
  • @Akke 你能登录到那个盒子并 cd 到“图像”目录并向我们展示pwd 的输出吗?

标签: php file download readfile public-html


【解决方案1】:

您必须提供绝对系统路径。目前,您在/images/... 而非/var/www/hosts/whateverdomain/images/... 请求文件。

$file = $_SERVER['DOCUMENT_ROOT'].'/images/protected/sample.pdf';

如果您的文件确实位于 /images/protected/,请确保您有足够的权限来读取该文件。

【讨论】:

  • 并记住它是网络服务器运行的用户,因为它需要访问权限。
【解决方案2】:

原来我使用的是共享主机,所以我网站的正确“根”路径是 /home/me/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2014-06-04
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2013-08-05
    相关资源
    最近更新 更多