访问链接时,您需要在 PHP 中添加什么代码以使浏览器自动将文件下载到本地计算机?
我特别想到了类似于下载站点的功能,一旦您单击软件名称,就会提示用户将文件保存到磁盘?
访问链接时,您需要在 PHP 中添加什么代码以使浏览器自动将文件下载到本地计算机?
我特别想到了类似于下载站点的功能,一旦您单击软件名称,就会提示用户将文件保存到磁盘?
在输出文件之前发送以下标头:
header("Content-Disposition: attachment; filename=\"" . basename($File) . "\"");
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($File));
header("Connection: close");
@grom:对“application/octet-stream”MIME 类型很感兴趣。我不知道,一直只使用“应用程序/强制下载”:)
这是发回 pdf 的示例。
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Transfer-Encoding: binary');
readfile($filename);
@Swish我没有找到应用程序/强制下载内容类型来做任何不同的事情(在 IE 和 Firefox 中测试)。是否有理由不发回实际的 MIME 类型?
同样在 PHP 手册Hayley Watson发布:
如果您希望强制下载和保存文件而不是渲染文件,请记住没有“application/force-download”这样的 MIME 类型。在这种情况下使用的正确类型是“application/octet-stream”,而使用其他任何东西只是依赖于客户端应该忽略无法识别的 MIME 类型并改用“application/octet-stream”这一事实(参考:Sections RFC 2046 的 4.1.4 和 4.5.1)。
同样根据IANA,没有注册的应用程序/强制下载类型。
一个干净的例子。
<?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);
?>
以上都不适合我!
2021 年为 WordPress 和 PHP 工作:
<?php
$file = ABSPATH . 'pdf.pdf'; // Where ABSPATH is the absolute server path, not url
//echo $file; //Be sure you are echoing the absolute path and file name
$filename = 'Custom file name for the.pdf'; /* Note: Always use .pdf at the end. */
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
@readfile($file);
感谢:https ://qastack.mx/programming/4679756/show-a-pdf-files-in-users-browser-via-php-perl
我的代码适用于 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);