Как мне остановить php от возвращения заголовков, когда я pcntl_fork ()? - PullRequest
1 голос
/ 13 апреля 2011

Кажется, что мой 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.

Я знаю, что, вероятно, с этим много чего не так, но я не хочу выходить за рамки темы.Есть ли способ подавить заголовки?

1 Ответ

0 голосов
/ 13 апреля 2011

Я уверен, что apache добавляет эти заголовки, а не php.Вот почему выходная буферизация не работает.Вы должны отключить их в apache.

...