Кажется, что мой php печатает заголовки X-Powered-By и Content-Type для каждого дочернего элемента, созданного pcntl_fork ().это не было бы проблемой, если бы он не печатал их в середине вывода.
Так, например, этот игрушечный скрипт:
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 () я смог сохранить количество дополнительных пар заголовков до двух.Так что ... где буферизировать вывод?
Конечно, я был бы так же рад решению, которое не включало бы буферизацию вывода.
Спасибо за вашу помощь!
Редактировать: Эта конкретная игрушка вилка предназначена для имитации передачи запроса в модель, чтения ее выходного потока данных с помощью представления, а затем преобразования его через механизм шаблонов, который будет выбранпериодический запрос ajax.
Я знаю, что, вероятно, с этим много чего не так, но я не хочу выходить за рамки темы.Есть ли способ подавить заголовки?