2015-02-10 64 views
0

我已阅读关于此特定主题的其他线程,但我相信有由ob_end_flush()生成的空白空间。php:ob_end_flush()停止工作的标题()

  1. 在我的代码,如果我先我呼吁ob_end_flush()header()头工作
  2. 如果去掉前导header()并把它调用ob_end_flush()然后头未能执行之后。
  3. 在后者的情况下,我检查页面(控制-U在FireFox),看看一个空行

这里是BOTH标题调用的代码。再次,领先标题工作,但如果我删除第一个标题ob_end_flush()后面的标题失败。

header('location:administrative page.php'); //-- return 

ob_end_flush(); 

header('location:administrative page.php'); //-- return 

的问题不能与任何未被发现的领先或由于第一头作品后高于或低于我的“问题区域”的代码的空白。

任何想法? ======================================== addendum 2/12/2015 感谢这两个答复... 我需要更多的关注我的错误日志在具有挑战性的时间...

对我来说“惊喜”显然ob_end_flush()启动头发送,因此“我的”后续头结构被阻止。 101行是:ob_end_flush(); 第105行是:header('location:administrative page.php');

20150212T083215: www.summersessiondevelopment.com/report.php 

PHP的警告:不能更改头信息 - 头已经发出在/爱马仕/ waloraweb026/b1614/MOO(输出开始/hermes/waloraweb026/b1614/moo.aassdevelopmentcom/report.php:101)。 aassdevelopmentcom/report.php on line 105

所以,我的任务是现在找到最终的方法来刷新我的fputcsv()缓冲区,然后使用fclose($ fp)关闭文件而不使用ob_end_flush();

我用蛮力方法试图找到一种方式来刷新缓冲区,所以我会检查,看看是否删除ob_end_flush()函数,只使用:

ob_flush(); 
flush(); 
fclose($fp); 

的伎俩。

再次感谢你们!

+0

可能重复的[如何解决]已经发送的头文件“PHP中的错误”(http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php) – 2015-02-10 17:06:55

回答

1

ob_end_flush输出缓冲区。在致电header之前,您不能有任何输出。

如果您需要存储以后显示的结果,请改为使用ob_get_flush

请参阅文档并考虑检查您的PHP错误日志。

+0

约翰,谢谢....但我对被认为是“输出”的东西有点困惑。下面的行在执行“n”次之前执行flush结构.....fflcsv($ fp,$ fields); .....关于ob_end_flush()的标题难题似乎并不介意fputcav()“输出”。我))使用flush()和fcose(),但他们似乎并不总是适当地泄漏缓冲区。 低于当前代码(头失败) - 但总是刷新缓冲区的唯一构造。 ob_end_flush(); ob_flush(); flush(); fclose($ fp); header('location:administrative page.php'); // - 返回 – 2015-02-11 22:26:38

+0

@GerryWilliams - 我想你回答了错误的评论。就“header”函数而言,“output”是将被发送到浏览器的任何文本。错误消息,警告,HTML,空白,任何东西。如果您在'header'调用之前有任何这样的情况,它将会失败。 – 2015-02-11 22:45:52