【问题标题】:Downloading files outside the webroot在 webroot 之外下载文件
【发布时间】:2014-12-11 13:26:14
【问题描述】:

好的,首先很抱歉,因为我意识到这是一个之前已经讨论过很多次的话题 - 相信我,我知道,我已经阅读了之前的所有问题和答案,但仍然无法让它发挥作用。

我有一个包含可下载文件的文件夹。出于安全考虑,我将此文件放在了 webroot 之外。然而,尽管我尽了最大努力,我还是无法让我的 php 脚本下载文件。

我正在使用使用 Plesk 11 的 Linux VPS Apache 服务器。

(简化的)文件结构如下。 httpdocs 文件夹是 webroot。 private/uploadedfiles 文件夹是我要下载的地方。

-var
 - www
  - vhosts
   - mydomain.org.uk
    - httpdocs (webroot)
    - private
     - uploadedfiles

我正在使用 jQuery ajax 调用将文件名传递给名为 downloadscript.php 的 PHP 脚本。该脚本位于httpdocs webroot 中。脚本如下:

<?php

$filename = $_POST['fbpath'];
$path = '/var/www/vhosts/mydomain.org.uk/private/uploadedfiles/' . $filename;

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($path));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($path));
ob_clean();
flush();
readfile($path);
exit;

?>

ajax 调用没有问题,但我在我的 PHP 日志中收到以下错误消息:

 PHP Warning: readfile(/var/www/vhosts/mydomain.org.uk/private/uploadedfiles/filename.docx): failed to open stream: No such file or directory

我已经检查、双重检查和三重检查,文件肯定存在于 uploadedfiles 文件夹内。

我还检查了这不是 open_basedir 限制问题 - 我很确定不是。

我确定我错过了一些非常简单的东西 - 我哪里出错了?

另外,我还没有编写上传文件的脚本 - 在继续之前我应该​​提前知道什么吗?

谢谢!

【问题讨论】:

  • 检查文件夹uploadedfiles及其内容的权限...可能是您的网络服务器或PHP可能无法访问这些文件,因为它们设置了权限...
  • 我已经打开了所有权限(通过我的 FTP 客户端)——权限行当前读取 drwxrwxrwx 用于 privateuploadedfiles 文件夹和 -rwxrwxrwx 用于存储在其中的文件.这是你的意思吗?如果是这样,它似乎没有工作。如果你的意思不同,你能告诉我吗?谢谢!

标签: php apache plesk


【解决方案1】:

经过多次尝试和错误,我似乎已经解决了问题。

问题在于使用 jQuery/Ajax。

当我将访问downloadscript.php 文件的方式更改为来自页面链接的直接$_GET 请求时,它奏效了。

不管怎样,谢谢大家的帮助!

克里斯

【讨论】:

    【解决方案2】:

    我曾经遇到过这个问题。这不是真正的解决方案,而是您的解决方法。我所做的是将我的文件下载到 webroot 内的 tmp 文件夹中。然后,每小时或每天,一个 cron 作业(Plesk 上的计划任务)在服务器上运行,使用 linux copy 命令将我的临时文件夹中的每个文件复制到 webroot 之外的另一个文件夹中。

    不过,您可以在此处查看所需内容:

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      相关资源
      最近更新 更多