尝试在文档根目录之外下载文件的 xampp 问题
Posted
技术标签:
【中文标题】尝试在文档根目录之外下载文件的 xampp 问题【英文标题】:xampp problem trying to dowload a file outside documentRoot 【发布时间】:2021-03-12 01:10:27 【问题描述】:我在虚拟主机中有这个:
<VirtualHost url.com:80>
DocumentRoot "e:\xampp\htdocs\project"
ServerName url.com
<Directory "e:\xampp\htdocs">
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
我正在尝试从 htdocs\downloads 下载文件...
当我这样做时在 php 代码中:
file_exists('../../downloads/fcm/'.$fcmb.'.pdf')
结果是 1 但是当我这样做时
<a href="../../downloads/fcm/<? echo $fcmb;?>.pdf" target="_blank"><? echo $fcmb;?></a>
结果是错误 404
问题是我不知道如何在项目目录之外下载文件我尝试了不同的方法但不起作用
【问题讨论】:
您不能将用户重定向到 DocumentRoot 之外的文件夹!您可以从其他文件夹提供文件,但用户必须通过 DocumentRoot 文件夹或其子文件夹访问此文件。所以直接一个href链接将不起作用。请改用 PHP 来提供此文件。 所以如果我用php强制下载它应该可以工作吗? PHP 可以访问 DocumentRoot 之外的文件夹。 Web 浏览器不能,因为 URL 仅限于 DocumentRoot 文件夹。 【参考方案1】:你的下载页面应该是这样的:
$file = '../../downloads/fcm/'.$fcmb.'.pdf';
if (is_file($file))
$finfo = finfo_open(FILEINFO_MIME_TYPE);
header('Content-Type: ' . finfo_file($finfo, $file));
finfo_close($finfo);
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
【讨论】:
以上是关于尝试在文档根目录之外下载文件的 xampp 问题的主要内容,如果未能解决你的问题,请参考以下文章
在 htdocs 文件夹之外制作 XAMPP / Apache 服务文件 [关闭]