调度后输出缓冲区中的换行

时间:2011-09-06 08:45:37

标签: php zend-framework

使用Zend Framework,我想发送一个文件。 但是当我从我的控制器这样做时,我注意到已经发送了一个LineFeed:

以下代码:

$data = 'Let me test this';
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="output.txt";' );
//header('Content-Length: '.strlen($data));
ob_clean(); flush();
die($data);

会给我output.txt文件:

[LF]
Let me test this

我有一个preDispatch插件,但我在退出之前尝试使用测试代码,并且还没有输出LF。所有控制器文件都以<?php开头。先没有任何LF。

所以,我的问题是:

  • 运行preDispatch插件之间会发生什么,并调度控制器? ..甚至更好:我怎样才能找到LineFeed的输出位置?

1 个答案:

答案 0 :(得分:2)

我在preDispatch()派生的插件中使用空Zend_Controller_Plugin_Abstract方法测试了您的代码,并且输出中没有任何LF。但是,如果我将echo "\n"明确添加到preDispatch()方法正文中,我确实会得到它。

所以,很有可能你的插件正在其他地方输出LF。也许你在插件中使用了结束标记? (只是为了放弃可能性)。

  

对于仅包含PHP代码的文件,结束标记(“?&gt;”)永远不会   允许的。它不是PHP所要求的,省略它会阻止它   意外地将尾随的白色空间注入响应中。

(在Zend Framework Coding Standard