如何在PHP中自动开始下载?
您需要在PHP中添加哪些代码,以便在访问链接时让浏览器自动将文件下载到本地计算机如何在PHP中自动开始下载?,php,automation,download,Php,Automation,Download,您需要在PHP中添加哪些代码,以便在访问链接时让浏览器自动将文件下载到本地计算机 我特别想到的是类似于下载站点的功能,即在单击软件名称后提示用户将文件保存到磁盘?以下是发送回pdf的示例 header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename="' . basename($filename) . '"'); header('Content-Transfer-Encodin
我特别想到的是类似于下载站点的功能,即在单击软件名称后提示用户将文件保存到磁盘?以下是发送回pdf的示例
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Transfer-Encoding: binary');
readfile($filename);
我没有发现应用程序/强制下载内容类型有任何不同(在IE和Firefox中测试)。有没有理由不发送回实际的MIME类型
此外,在发布的PHP手册中:
如果您希望强制下载并保存文件,而不是呈现文件,请记住,没有“application/forcedownload”这样的MIME类型。在这种情况下使用的正确类型是“应用程序/八位字节流”,而使用其他类型仅仅依赖于这样一个事实,即客户端应该忽略未识别的MIME类型,而使用“应用程序/八位字节流”(参考:RFC 2046第4.1.4节和第4.5.1节)
此外,没有注册的应用程序/强制下载类型。在输出文件之前发送以下标题:
header("Content-Disposition: attachment; filename=\"" . basename($File) . "\"");
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($File));
header("Connection: close");
:有关“应用程序/八位字节流”MIME类型的有趣信息。我没有意识到这一点,我总是使用“应用程序/强制下载”:)一个干净的例子
<?php
header('Content-Type: application/download');
header('Content-Disposition: attachment; filename="example.txt"');
header("Content-Length: " . filesize("example.txt"));
$fp = fopen("example.txt", "r");
fpassthru($fp);
fclose($fp);
?>
我的代码适用于txt、doc、docx、pdf、ppt、pptx、jpg、png、zip扩展,我认为最好明确使用实际的MIME类型
$file_name = "a.txt";
// extracting the extension:
$ext = substr($file_name, strpos($file_name,'.')+1);
header('Content-disposition: attachment; filename='.$file_name);
if(strtolower($ext) == "txt")
{
header('Content-type: text/plain'); // works for txt only
}
else
{
header('Content-type: application/'.$ext); // works for all extensions except txt
}
readfile($decrypted_file_path);
我不太清楚为什么,因为这对我来说是新的,但这个脚本只有在我有内容长度行的情况下才能正常工作。这很好,但出于某种原因,即使它显示了正确的名称和大小,我的下载也会随机停止并说网络错误。有人知道为什么会这样吗?我知道这不是我的wi-fi/实际网络连接。它在PC上工作,但。。。当我在Android设备上访问下载页面时,“无法下载。内容不受支持”。为什么?@Emerald214没有PDF阅读器。或者与PDF内容类型没有关联,特别是如果目标文件类型是.zip,并且您在页面上所做的一切都是通过PHP启动文件下载,那么您可能需要添加
ob_clean()代码>和ob_flush()代码>在上述答案中提供的代码之前;当尝试在Windows中以本机方式打开.zip时,我遇到了一个问题,即操作系统报告以这种方式获取的.zip存档无效,尽管7zip和其他专用压缩存档格式处理工具可以很好地处理它们。它可能行得通,但我甚至不会称之为“干净”。例如,它包括输入文件名三次。相反,我将文件名设置为一个变量,这样您的代码就不会冗余,并且可以减少出错的机会。