尝试在文档根目录之外下载文件的 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 服务文件 [关闭]

xampp常见安装失败问题

XAMPP环境访问非Web DocumentRoot下绝对路径

#Linux 下 Xampp的安装与Hello World

win7 xampp之安装composer

如何在ubuntu的xampp中更改文档根目录?帮助文档根不工作