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:从服务器下载时保持相同的文件名的主要内容,如果未能解决你的问题,请参考以下文章
当我通过 PHP 代码从我的电子邮件帐户下载文件时,以希伯来语附加的文件名被编码