PHP:从服务器下载时保持相同的文件名

Posted

技术标签:

【中文标题】PHP:从服务器下载时保持相同的文件名【英文标题】:Php: Keep same filename when downloading from server 【发布时间】:2013-08-20 20:05:34 【问题描述】:

我正在通过 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";

【问题讨论】:

试试这个代码。 header("Content-Disposition: attachment; filename=$name.$file_ending"); 不同之处在于连接。 【参考方案1】:

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

【讨论】:

【参考方案2】:
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";
    

【讨论】:

"...filename=\"basename($file)\"" 并没有按照你的想法去做。 对不起,是我的错...忘了把函数放在引号里..现在您可以使用服务器中的原始文件名并将其发送到下载的文件中【参考方案3】:

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

这条线或许能解决问题。

【讨论】:

请解释一下这段代码如何解决这个问题。 .basename($file) 将返回 $file 字符串的最后一部分(文件名和扩展名),这是上面提到的问题。

以上是关于PHP:从服务器下载时保持相同的文件名的主要内容,如果未能解决你的问题,请参考以下文章

从 archive.org 下载文件

.exe 文件从服务器下载时损坏

当我通过 PHP 代码从我的电子邮件帐户下载文件时,以希伯来语附加的文件名被编码

如何从 FTP 下载文件并使用 PHP 将其流式传输到客户端

nginx反向代理下载文件失败处理

如何使用 PHP 代码从服务器下载文件