【发布时间】: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用于private和uploadedfiles文件夹和-rwxrwxrwx用于存储在其中的文件.这是你的意思吗?如果是这样,它似乎没有工作。如果你的意思不同,你能告诉我吗?谢谢!