Очень часто встречаюсь с проблемой, когда для реализации простого ответа, приходится использовать другой язык. Суть проблемы: при закрытии основного буфера, php отправляет все заготовленные заголовки ( HTTP/1.1 200 OK\r\nContnet-Type:...\r\n\r\n), а требуется в ответе вывести некую строчку, на пример "OK". Пару дней спрашивал гугл, умеет ли php как perl не выводить http заголовки. Все что приводилось в примерах, не работает для php-fcgid. Придется вкомпиливать что-то свое, реализовать на другом языке, или все таки PHP умеет не отправлять заголовки?
наверное можно заставить. хз как. почему такая хитрость потребовалась? на том конце не понимают http?
Умеют только спрашивать по HTTP, а парсить заголовки не хотят. Но есть еще одна задача. Раз в 20 сек отправлять HTTP/1.1 102 Processing. А после первого же flush(), пыха отправляет \r\n\r\n
Да не, норм. Обработка до минуты занимает, а cgid убивает процесс, если он молчит больше 20сек, по урлам это исправлять нельзя, а для всего сервера - слишком жирно, в общем, не просто так у нас 20 сек выставлено. По сему, слать каждые 10 - 15 сек "Я еще живой" - норм
А вы что выводите заголовки? А не проще после удачно попытки выводить этот ОК как текст? В случае ошибки выводить NO.
мне то, конечно проще Ну это не столь важно как заставить cgi не убивать процесс, который находится в обработке. max_execution_time(null) не помогает, так как это дочерний процесс, родитель которого убъет его, в случае если не будет никакгого ответа, в заданный период времени(20 сек). Но при выдаче ответа, вываливаются все заготовленные заголовки, с разделителем блока заголовков(второй eol), и все что пишется дальше, браузер воспринимает как контент Добавлено спустя 2 минуты 11 секунд: выход для отображения статусу клиенту, а нужно немного другое. Чтобы родительских процесс не грохал ребенка, который еще жив. На клиента пофигу по большому счету
Что-то я подозреваю, что человек пытается на php натуральный сервер написать. Чтоб он висел в памяти, як демон, ждал запроса, и отдавал в ответ что-нибудь. А ещё я подозреваю, что php для таких задач не предназначен
нельзя. родитель все равно шлепнит процесс если он не ответит за 20 сек. Но вечный пхп мне тоже не нужен. Эта настройка меняется только для всего сервера, что не есть секъюрно. есть только 1 урл, на котором может долго обрабатываться запрос. Остальные должны работать в штатном режиме, со всеми онраничениями. Не, не пытаюсь. Пытаюсь за 1 запрос от клиента, поговорить еще с 2мя апи, которые медленные, но живые. И они то как раз, переодически шлют 102, вот хотел узнать, может ли php так делать
если вы не можете контролировать родителя, то блин что у вас там творится? =))))))) сделай поддомен. более того, можно менять извнутре пхп-скрипта, если разрешено, короче задача неясна. может, но так никто не делает. тут даже не в пхп проблема, а в том, что браузер так не делает. он рвет связь после 30 секунд тишины. делают так: пхп работает, запускается как-то либо демоном-родителем, либо по крону, и обновляет статус задачи. браузер аяксом опрашивает статус раз в несколько секунд (раз в три допустим) и рисует красоту юзеру.
Добрый день. У меня не fast-cgi, у меня http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html Остановился на кривом решении, отдать все заголовки, а потом, периодически слать пробел для ответа json. Работает, но как то не красиво. Хотелось бы конечно с 102м заголовком. По RFC допускается второй \r\n, если заголовок множественный (как 102й, например). Но так как я не отдал Content-Length, апаче сам превращает ответ в chunked, и не дает это поменять из php, Что превращает Код (Text): file_put_contents('php://output', "HTTP/1.1 102 Processing\r\n");flush(); в Код (Text): {len} HTTP/1.1 102 Processing ... {len} HTTP/1.1 200 OK {len} ... 0 Разумеется, браузер от такого в шоке и считает это контентом. В общем, php без бубна не для таких задач. Вот основной вопрос и есть, как, если может Я не про браузер говорю, хотя хром тоже нормально понимает 102й заголовок. Бракзер у меня на веб сокките висит, с ним то проблем нет. У меня проблема, чтобы апаче не рубил пхпшных детей которые еще живы.