在我的基于CodeIgniter的站点(成员管理系统)上,有创建直接借记文件的功能。这些是通过设置标题下载的,如下所述:http://www.richnetapps.com/the-right-way-to-handle-file-downloads-in-php/。 但是,由于某种原因,在我自己的输出之前总是输出一个空行。我已经尝试替换我返回的字符串中的所有换行但没有成功。输出是一个XML文件,由于这个空行,我的银行不接受该文件作为有效的XML。
我已经发现帖子说这可能是因为PHP在当前文件之前关闭了文件中的标签。这可能是原因,但是加载了几个第三方库,如果您仍然希望保留更新库的选项,则可以撤消手动删除每个文件中所有关闭的PHP标记。似乎特别是Smarty喜欢这些结束标签。
直接访问文件本身也不是一个选项,因为默认情况下CodeIgniter不允许这样做,并且因为这种方法存在相当大的安全问题(公共可访问的文件中包含银行帐户详细信息是一个很大的禁忌) 。
因此,我来找你:你知道另一个解决这个问题的方法吗?
编辑:这是用于下载的代码。
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;
}
答案 0 :(得分:3)
如果函数中的$contents
没有换行符,请尝试使用输出缓冲区函数。
在文件开头,在包含任何其他文件之前,请致电ob_start();
。然后,在您的函数内部echo $contents;
之前添加ob_end_clean();
。这将确保没有发送其他脚本的输出。
答案 1 :(得分:0)
Vi编辑器(或vim)在编辑文件的末尾留下额外的换行符。如果您已将vi用于任何包含的文件,那一定是问题。
以下回答描述了以简单的方式删除文件末尾的换行符:
How can I delete a newline if it is the last character in a file?
给定命令可以与linux find
一起使用来删除php文件中的所有尾随换行符。
for i in `find /path/to/project -name *.php`
do
perl -i -pe 'chomp if eof' $i
done
答案 2 :(得分:0)
我完全不明白你的问题,但由于你的$ content是一个字符串,你可以简单地使用
echo trim($content)
删除新行
答案 3 :(得分:0)
这适合我。
header('Content-type: text/xml');
print_r ($content);
答案 4 :(得分:0)
对于php feed,使用它删除空格ob_end_clean();
$data['encoding'] = 'UTF-8';
$data['query'] = $this->Feed_model->get_feeds();
header("Content-Type: application/rss+xml");
ob_end_clean();
$this->load->view('rss',$data);