好的,首先很抱歉,因为我意识到这是一个之前已经多次讨论过的主题 - 相信我,我知道,我已经阅读了之前的所有问题和答案,但仍然无法解决这个问题。
我有一个包含可下载文件的文件夹。出于安全目的,我将此文件放在 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) 您好我使用PHP来允许用户上传文件,出于安全原因,我让他们坐在webroot(/ var/www)文件夹之外的文件夹中.它位于文件夹/ var/uploads中.用户上载特定记录的文件.将上载的文件移动到uploads文件夹后,附件的地址将存储在数据库中.现在,只要用户检查记录,就会显示特定记录的附件以供下载.
由于他们不在webroot,我无法下载,因为他们会有一个网址
我们有解决方案,还是可下载的文件夹是webroot的子目录?
<?php
$con = mysql_connect("localhost","id","pass");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("db", $con);
$result = mysql_query("select * from attachments");
while($row = mysql_fetch_array($result))
{
echo '<a href="'.$row[2].'" target="_blank">Download</a>--'.$row[3].'<br>';
}
mysql_close($con);
?>
Run Code Online (Sandbox Code Playgroud)
是我正在使用的代码.文件夹的所有者是www-data:/或Web服务器.所以应该没有访问问题.
我正在通过我的网站强制下载图像。
\n\n强制下载在 Apache/Windows 开发机器上运行良好。
\n\n然而,当它在我的 Linux Web 服务器上运行时,它会将垃圾字符推送到屏幕上。
\n\ne.g. \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdJFIF\xef\xbf\xbd\xef\xbf\xbdH\xef\xbf\xbdH\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd6Exif\xef\xbf\xbd\xef\xbf\xbdMM\xef\xbf\xbd*\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\nRun Code Online (Sandbox Code Playgroud)\n\nInternet Explorer 7 - 在页面中显示图像
\n\n$fileName = basename($filePath);\n$fileSize = filesize($filePath);\n\n\n// Output headers.\nheader("Cache-Control: private");\nheader("Content-Type: Image/jpeg");\nheader("Content-Length: ".$fileSize);\nheader("Content-Disposition: attachment; filename=".$fileName);\n\n\n// Output file.\nreadfile ($filePath); \nexit();\nRun Code Online (Sandbox Code Playgroud)我的实时服务器上可能存在哪些差异会导致其崩溃?
\n