如何在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

您需要在PHP中添加哪些代码,以便在访问链接时让浏览器自动将文件下载到本地计算机


我特别想到的是类似于下载站点的功能,即在单击软件名称后提示用户将文件保存到磁盘?

以下是发送回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和其他专用压缩存档格式处理工具可以很好地处理它们。它可能行得通,但我甚至不会称之为“干净”。例如,它包括输入文件名三次。相反,我将文件名设置为一个变量,这样您的代码就不会冗余,并且可以减少出错的机会。