好的,首先很抱歉,因为我意识到这是一个之前已经多次讨论过的主题 - 相信我,我知道,我已经阅读了之前的所有问题和答案,但仍然无法解决这个问题。
我有一个包含可下载文件的文件夹。出于安全目的,我将此文件放在 webroot 之外。然而,尽管我尽了最大的努力,我还是无法让我的 php 脚本下载文件。
我正在使用使用 Plesk 11 的 Linux VPS Apache 服务器。
(简化的)文件结构如下。该httpdocs文件夹是 webroot。该private/uploadedfiles文件夹是我要下载的位置。
-var
- www
- vhosts
- mydomain.org.uk
- httpdocs (webroot)
- private
- uploadedfiles
Run Code Online (Sandbox Code Playgroud)
我正在使用 jQuery ajax 调用将文件名传递给名为downloadscript.php. 该脚本位于httpdocswebroot 中。脚本如下:
<?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;
?>
Run Code Online (Sandbox Code Playgroud)
ajax 调用没有问题,但我在 PHP 日志中收到以下错误消息:
PHP Warning: readfile(/var/www/vhosts/mydomain.org.uk/private/uploadedfiles/filename.docx): failed to open stream: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我已经检查、双重检查和三重检查,该文件肯定存在于uploadedfiles文件夹内。
我还检查过这不是open_basedir限制问题 - 我很确定不是。
我确定我遗漏了一些非常简单的东西 - 我哪里出错了?
另外,我还没有编写用于上传文件的脚本 - 在继续之前有什么我应该提前知道的吗?
谢谢!
经过多次尝试和错误,我似乎已经解决了这个问题。
问题在于使用 jQuery/Ajax。
downloadscript.php当我将文件访问方式更改为$_GET从页面上的链接直接请求时,效果非常好。
不管怎样,谢谢大家的帮助!
克里斯
| 归档时间: |
|
| 查看次数: |
6254 次 |
| 最近记录: |