0

我正在通过 php 脚本下载文件,除了一个丑陋的事实外,一切都运行良好。下载的文件保留相同的 url 并附加原始名称。下载文件时如何保持相同的文件名?

http://bachday.com/index.php?page=custom&file=mmailer/download.php?mfile=sample.docx
if (isset($_GET['mfile'])) {
    $file = $_SERVER['DOCUMENT_ROOT'].'/oc-content/plugins/mmailer/pfile/'.$_GET['mfile'];

    if (file_exists($file) && is_readable($file) && preg_match('/\.docx$/',$file)) {
        header('Content-Type: application/docx');
    header("内容配置:附件;文件名=\"$file\"");
    读取文件($文件);
    /*
    header("过期时间:0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    echo (readfile($file));*/


    }
    别的
    {
        header("HTTP/1.0 404 Not Found");
        echo "错误 404: 未找到文件: 
$file "; }
4

3 回答 3

3

header('Content-Disposition: attachment; filename="name_of_file_here"')会成功的。您在那里传递文件的完整路径,header("Content-Disposition: attachment; filename=\"$file\"");因为您的 $file 包含完整路径。相反,只需发送文件名。

于 2013-08-19T05:22:56.297 回答
1

header('Content-Disposition: attachment; filename='.basename($file));

这条线也许可以解决这个问题。

于 2018-01-06T11:24:31.033 回答
0
if (isset($_GET['mfile'])) {
    $file = $_SERVER['DOCUMENT_ROOT'].'/oc-content/plugins/mmailer/pfile/'.$_GET['mfile'];

    if (file_exists($file) && is_readable($file) && preg_match('/\.docx$/',$file)) {
        header('Content-Type: application/docx');
    header("Content-Disposition: attachment; filename=\"".basename($file)."\"");//use basename to extract filename from full file path
    readfile($file);
    /*
    header("Expires: 0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    echo (readfile($file));*/


    }
    else
    {
        header("HTTP/1.0 404 Not Found");
        echo "Error 404: File Not Found: 
$file";
    }
于 2013-08-19T05:59:58.080 回答