Php下载文件不适用于Firefox

时间:2014-09-14 19:28:51

标签: php firefox download

已解决,由于引导程序已知问题(Nesting <a> inside <button> doesn't work in Firefox)。

我试图简单地强制下载一个文件,它在Chrome&amp; Safari,但不适用于Firefox。

我已经下载了.php文件来下载我的文件(用于&#34; a href&#34;):

<?php

$filename="myFile.pdf";
$file="../content/$filename";
$len = filesize($file); // Calculate File Size
if (ob_get_contents()) ob_end_clean();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Description: File Transfer");
header("Content-Type:application/pdf"); // Send type of file
$header="Content-Disposition: attachment; filename=$filename;"; // Send File Name
header($header );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$len); // Send File Size
@readfile($file);
exit;

?>

它用于:

<a class="myFileClass" href="download.php">Download</a>

所以使用Chrome&amp; Safari,当我点​​击下载链接时,文件被下载了! 但是对于Firefox,没有任何反应。

对这个好奇的问题有什么看法吗?

先谢谢。

2 个答案:

答案 0 :(得分:4)

    $header="Content-Disposition: attachment; filename=$filename;";

这是错误的,请使用引号作为文件名。它应该像下面的

    header('Content-Disposition: attachment; filename="' . basename($file).'"');

示例代码

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . basename($file).'"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();

    readfile($file);

答案 1 :(得分:-2)

上面带有基本名称引用等的示例会下载一个空文件。

下面的代码返回数据,其中html数据也包含在Wordpress调用输出中,但仅包含在Wordpress之外的干净数据。

这两个代码只在IE中生成下载调用。

$filename = $db_record.'_'.date('Y-m-d').'.csv';
header('Pragma: public');
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the Past
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename='. $filename);
Readfile($filename);