Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 强制在所有浏览器中保存文件-不在浏览器窗口中打开_Php_Download - Fatal编程技术网

Php 强制在所有浏览器中保存文件-不在浏览器窗口中打开

Php 强制在所有浏览器中保存文件-不在浏览器窗口中打开,php,download,Php,Download,我想要一个在所有浏览器中都能工作的简单解决方案 对于特定的文件类型,或通过类的目标链接:如何让它们在所有主要浏览器中强制下载 我认为我找到了apachce服务器的完美解决方案——将其添加到.htaccess中 似乎可以在Firefox和Safari中使用,但不能在chrome或IE中使用(没有测试过其他任何东西) 有谁能帮我找到一个解决方案,告诉我如何为所有浏览器创建链接以强制下载文件,而不是在浏览器中打开 我似乎找不到一个完全支持浏览器的解决方案。不可能吗 任何指向教程或代码片段的链接都非常

我想要一个在所有浏览器中都能工作的简单解决方案

对于特定的文件类型,或通过类的目标链接:如何让它们在所有主要浏览器中强制下载

我认为我找到了apachce服务器的完美解决方案——将其添加到.htaccess中

似乎可以在Firefox和Safari中使用,但不能在chrome或IE中使用(没有测试过其他任何东西)

有谁能帮我找到一个解决方案,告诉我如何为所有浏览器创建链接以强制下载文件,而不是在浏览器中打开

我似乎找不到一个完全支持浏览器的解决方案。不可能吗

任何指向教程或代码片段的链接都非常棒

如果我的网站基于PHP,那么如果可行的话,它可以与PHP一起工作


谢谢

将内容处置标题设置为“附件”,如下所示(在PHP中):

您甚至可以为下载建议一个文件名(如果它与URL中给出的文件名不同):

如果要直接在Apache服务器中执行此操作,请尝试以下操作:

<FilesMatch "\.(pdf|csv|xls)">
  Header set Content-Disposition attachment
</FilesMatch>

标题集内容处置附件
(您可以在FileMatch模式中添加更多扩展名)


如果可以,请尽量避免使用应用程序/八位字节流头,也就是说,如果没有它,内容处置工作正常。这是因为有些系统实际上会注意内容类型,并将其与文件一起保存。如果用户的系统能够找出文件的正确MIME类型,通常对用户来说会更好。

假设
$file
保存了文件的路径,我经常使用一个脚本来执行此操作:

$file = 'file.gif'; // example
$filesize=filesize($file);

if ($filesize > 0) {
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/gif");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );

readfile($file);
}
对于没有文件结构的设备(如iPad/iPhone),您确实会遇到问题,但您可以删除内容处置行来解决问题。


<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>
ForceType应用程序/八位组流 标题集内容处置附件

将此项添加到.htaccess(将pdf更改为您想要的格式)--这项功能目前在我测试过的所有浏览器(尚未测试opera或safari)中都可以使用。

您好,谢谢您的帮助。我正在将此添加到我的wordpress网站。在我的single-download.php模板上(这是我希望强制下载的地方),我将您的行添加到模板中,如下所示<代码>但似乎没有效果?谢谢确保在将任何内容输出到浏览器之前运行所有header()调用。如果get_header()函数输出任何内容,请将header()调用放在前面。谢谢,您的答案看起来非常有趣。我想我可以在wordpress上的一个基本循环中轻松实现这一点,但我的PHP知识非常基础。我正试图通过galley短代码让它工作<代码>do_短代码('[gallery customgal=“true”]')由此自定义库函数生成…-我想强制下载的$fullsize_image变量,用于第108行。任何指点都将不胜感激,谢谢。乔希
<FilesMatch "\.(pdf|csv|xls)">
  Header set Content-Disposition attachment
</FilesMatch>
$file = 'file.gif'; // example
$filesize=filesize($file);

if ($filesize > 0) {
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/gif");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );

readfile($file);
}
<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>