似乎我的php为pcntl_fork()生成的每个孩子打印了X-Powered-By和Content-Type标题。如果没有在输出中间打印它们,这不会有问题。
所以,例如,这个玩具脚本:
function very_long_process($shm){
sleep(20);
shm_put_var($shm,0,'terminated');
}
function iterate_until_terminated($shm){
$signal = shm_get_var($shm,0);
if($signal=='running'){
$j = shm_get_var($shm,1);
$j++;
shm_put_var($shm,1,$j);
sleep(2);
iterate_until_terminated($shm);
}
else{
exit;
}
}
$shm = shm_attach(ftok(tempnam('/tmp','PHP'),'a'),1000000);
shm_put_var($shm,0,'running');
$i=0;
shm_put_var($shm,1,$i);
$pid = pcntl_fork();
if($pid==0){
iterate_until_terminated($shm);
}
very_long_process($shm);
while (pcntl_waitpid(0, $status) != -1) {
$status = pcntl_wexitstatus($status);
}
$iterated = shm_get_var($shm,1);
$signal = shm_get_var($shm,0);
echo "<p>iterated $iterated times.";
echo "<p>process was $signal";
生成输出(在浏览器中):
X-Powered-By: PHP/5.2.17
Content-type: text/html
<p>iterated 10 times.<p>process was terminated
我已经阅读并且想要相信,解决方案是使用ob_start()和ob_end_clean(),但我已经在几个地方尝试了它并且它不起作用,尽管(很奇怪) ob_end_flush()我能够将额外标头对的数量保持为2。那么呃..在哪里缓冲输出?
当然,我对使用不涉及输出缓冲的解决方案感到满意。
感谢您的帮助!
编辑: 这个特定的玩具分支用于模拟将请求传递给模型,使用视图读取其输出数据流,然后通过模板引擎将其转换为由定期ajax请求获取。
我知道这可能有很多问题,但我不想在这里偏离主题。有没有办法抑制标题?
答案 0 :(得分:0)
我很确定apache正在添加这些标头,而不是php。这就是输出缓冲不起作用的原因。你必须在apache中关闭那些。