在一种"一步一步" /"向导" 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>
有什么建议吗?摆弄内容类型已经无济于事。最后的手段是压缩整个文件并再试一次,但这会使它变得不必要复杂。
答案 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
但是,这可能需要您将下载放在单独的脚本中。