【问题标题】:PHP: File cannot be downloaded ("404 Not Found" message)PHP:无法下载文件(“404 Not Found”消息)
【发布时间】:2015-05-14 08:53:58
【问题描述】:

我正在开发一个我没有为其编写代码的客户的网站。我无法下载文件。

这是关于用户可以下载课程文件的子域。 网站文件包含在文件夹“课程”中(在根级别)。

  • 用于显示可下载课程文件的文件包含在 “课程/显示文件.php”。
  • 可下载的文件包含在“课程/下载文件夹”的文件夹中。在这个文件夹中,每个用户都有自己的 files 文件夹,其名称具有用户 ID。

displayfiles.php:以下代码成功显示所有登录用户可以下载的文件:

  $path = "downloadfolder/" . $_SESSION['userId'] . "/";
  $files = array();
  $output = @opendir($path) or die("$path could not be found");

  while ($file = readdir($output)) {
    if (($file != "..") and ($file != ".")) {
      array_push($files, $file);
    }
  }
  closedir($output);
  sort($files);

  foreach ($files as $file) {
    echo '<a class="imtext" href="downloadfolder/' . $_SESSION['userId'] . '/' . $file . '/">' . $file . '</a><br/>';
  }

那么这段代码有什么不好的地方:当用户点击一个文件时,我收到一条“404 Not Found”消息,表明找不到该文件。怎么会这样?

为什么显示文件完全正常,但同时单击文件时出现 404 错误?文件路径 ($path) 是否必须正确?为了解决这个问题,我需要进行哪些进一步的调查?

* 更新 *

我决定修改文件循环如下(更改href):

foreach ($files as $file) {
            echo '<a class="imtext" href="http://'.$_SERVER['HTTP_HOST']. '/downloadfolder/' . $_SESSION['courseId'] . '/' . $file . '/">' . $file . '</a><br/>';
      }

不过,当我单击文件时,我会收到 404 Not Found 错误。这怎么可能?

【问题讨论】:

  • 对您来说最好的方法是检查生成的链接。它可能是一个错误的地方。检查所有对应的目录是否存在。
  • 我把href改成如下:href="http://'.$_SERVER['HTTP_HOST']. '/downloadfolder/' . $_SESSION['courseId'] . '/' . $file . '/"&gt;这绝对是文件所在的地方。我仍然收到 404 错误。这怎么可能?
  • 如果您确定一切正常并且文件确实存在,那么请看一下:stackoverflow.com/questions/24654907/…。也许这个链接会有帮助。

标签: php file fopen


【解决方案1】:

您必须查看页面的 webroot 在哪里,生成列表的 php 文件在哪里以及文件在哪里。

您生成的链接是相对于生成链接的 php 文件而言的,它可能与浏览器中的 URL 不对应。我会尝试使这个链接相对于 webroot(注意前导斜杠!)

echo '<a class="imtext" href="/courses/downloadfolder/' . $_SESSION['userId'] . '/' . $file . '/">' . $file . '</a><br/>';

如果猜测的解决方案不起作用,请提供生成此链接的页面的当前 URL 和一个生成的链接,以便我们更好地为您提供帮助。

【讨论】:

  • 感谢您的建议,但这不起作用。我编辑了我的帖子(请参见上文)。我在 href 中添加了文档根目录,但仍然出现 404 错误。这怎么可能?
猜你喜欢
  • 2019-03-24
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多