gpt4 book ai didi

php - PHP (CodeIgniter) 文件下载中的空行

转载 作者:可可西里 更新时间:2023-11-01 13:26:20 25 4
gpt4 key购买 nike

在我基于 CodeIgniter 的站点(成员(member)管理系统)上,有创建直接借记文件的功能。这些是通过设置标题下载的,如此处解释:http://www.richnetapps.com/the-right-way-to-handle-file-downloads-in-php/ .但是不知为何,在我自己的输出之前总是输出一个空行。我已经尝试替换我返回的字符串中的所有换行符但没有成功。输出是一个 XML 文件,由于这个空行,我的银行不接受该文件作为有效的 XML。

我已经找到帖子说这可能是因为当前文件之前的文件中的 PHP 结束标记。这可能是原因,但加载了多个第三方库,如果您仍想保留更新库的选项,则手动删除每个文件中的所有结束 PHP 标记是不可撤销的。似乎 Smarty 特别喜欢这些结束标签。

直接访问文件本身也不是一个真正的选择,因为默认情况下 CodeIgniter 不允许这样做,并且因为这种方法强加了相当大的安全问题(带有银行帐户详细信息的公共(public)可访问文件是一个很大的禁忌) .

因此,我来​​找你:你知道这个问题的另一种可能的解决方案吗?

编辑:这是用于下载的代码。

function incasso_archive($creditor, $date, $time, $extension)
{
$date = str_replace("_", "-", $date);

$fn = $this->incasso->incasso_file($creditor, $date, $time, $extension);

$contents = file_get_contents($fn);
$name = "Incasso $date.$extension";

header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: Binary');
header('Content-disposition: attachment; filename="'.$name.'"');
echo $contents;
}

最佳答案

如果函数中的 $contents 没有换行符,请尝试使用输出缓冲函数。

在文件的开头,在包含任何其他文件之前,调用 ob_start();。然后,在您的函数内,在 echo $contents; 之前,添加 ob_end_clean();。这将确保不会发送其他脚本的任何输出。

关于php - PHP (CodeIgniter) 文件下载中的空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22713309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com