好的,首先道歉,因为我意识到这是一个之前已经讨论过很多次的主题 - 相信我,我知道,我已经阅读了之前的所有问题和答案,但仍然无法使其发挥作用。
我有一个包含可下载文件的文件夹。出于安全目的,我将此文件放置在 Webroot 之外。然而,尽管我尽了最大努力,我还是无法让我的 php 脚本下载该文件。
我正在使用 Plesk 11 的 Linux VPS Apache 服务器。
(简化的)文件结构如下。这httpdocs
文件夹是网络根目录。这private/uploadedfiles
文件夹是我要下载的位置。
-var
- www
- vhosts
- mydomain.org.uk
- httpdocs (webroot)
- private
- uploadedfiles
我正在使用 jQuery ajax 调用将文件名传递给名为的 PHP 脚本downloadscript.php
。该脚本位于httpdocs
网络根目录。脚本如下:
<?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
folder.
我还检查过它不是open_basedir
限制问题 - 我很确定不是。
我确信我错过了一些非常简单的东西 - 我哪里出错了?
作为额外的补充,我还没有编写用于上传文件的脚本 - 在继续之前我应该提前了解什么吗?
Thanks!