使用PHP的纯文本下载显示在浏览器窗口中,而不是下载

时间:2016-07-01 12:43:01

标签: php download

在一种"一步一步" /"向导" setup我尝试将新创建的纯文本文件发送给用户。

问题是,在localhost(windows,xampp)上,它按预期工作但在远程计算机上执行(托管的网站空间),它在浏览器窗口中以纯文本形式提供文件内容。 (使用相同的浏览器测试:chrome)

该文件是一个纯文本文件,里面有数据库备份(只有少数几个,不大),并且是在下载前一步创建的。下一步是删除它,也可以正常工作。文件本身有效且所有句柄都已关闭。浏览器中显示的内容是包含所有行的实际文件。

$ _ POST清理工作在下载工作时出现,为了简化未经过化验的atm:

<?php
require_once('CSettings.php');
$s = new CSettings();
$file = $_POST['file'];

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: text/plain');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header("Pragma: public");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header('Content-Length: ' . filesize($file));
    readfile($file);
}

?>

<form action="index.php" method="post" accept-charset="UTF-8">
    <input type="submit" value="Delete backup file from the server" class="btn_red">
    <input type="hidden" value="<?php echo $file; ?>" name="file">
    <input type="hidden" value="delete_backup" name="view">
</form>

有什么建议吗?摆弄内容类型已经无济于事。最后的手段是压缩整个文件并再试一次,但这会使它变得不必要复杂。

1 个答案:

答案 0 :(得分:0)

可能有效的一个解决方案是使用下载html属性,但Safari似乎并不支持它。

  

点击链接时下载文件(而不是导航到   文件):

     

int catalan(int n) { int res = 0; // Base case if (n <= 1) { return 1; } for (int i = 0; i < n; i++) { res += catalan(i) * catalan(n - i - 1); } return res; }

来自:http://www.w3schools.com/tags/att_a_download.asp

但是,这可能需要您将下载放在单独的脚本中。

您也可以在此处查看:How to Automatically Start a Download in PHP?