#php #ajax #comet #execution-time
#php #ajax #комета #время выполнения
Вопрос:
Сначала я хочу указать, что это не тот же вопрос, что и другие, потому что я не хочу увеличивать максимальное время выполнения.
Но к моей проблеме: у меня длинный опрос, поэтому AJAX-POST с таймаутом (выше, чем максимальное время выполнения PHP, поэтому мне не нужно беспокоиться об этом значении). Теперь я понял, что если я оставлю свой компьютер с открытым браузером (и запущенным xampp), публикация не будет прервана (например, при перезагрузке страницы). Когда я вернусь к компьютеру (Windows, он перешел в спящий режим), скрипт не остановится с моим таймером…:
$loop = array(
"count" => 0,
"sleeptime" => 2,
"maxec" => 30,
"start" => time(),
);
$change = false;
while ($change) {
$loop["count"] ;
$looptime = ((time() - $loop["start"]) / $loop["count"]);
if ($looptime * ($loop["count"] 1) >= $loop["maxec"] - $looptime) {
$response["s"] = 1; // $response is an array which will be printed at the end / JSON format
$change = true;
} else {
sleep($loop["sleeptime"]);
}
// check my database
// if there is an update, set $change = true and print the update
}
… но выдает мне стандартное сообщение об ошибке:
Неустранимая ошибка: превышено максимальное время выполнения на 30 секунд в *file*.php в строке 20
И мой таймер работает в любой другой ситуации… (* пока я могу сказать «каждый» 😉 )
Итак, я ищу лучший способ напечатать мой ответ, например {«response»: 1}, вместо сообщения об ошибке. Поэтому мне нужен лучший рабочий таймер или совершенно другое решение.
Я нашел это через Google:
http://www.php.net/manual/en/function.register-shutdown-function.php
Но я не могу представить, как это могло бы помочь мне получить «до» фатальной ошибки.
Комментарии:
1. как именно это будет работать? Выполнение вашего кода завершения работы означает выполнение БОЛЬШЕГО КОЛИЧЕСТВА кода, что означает, что вы запускаете часы выполнения, но вы уже превысили лимит. Другими словами, вы пытаетесь обойти ограничение или, говоря человеческим языком, «дайте мне поспать еще 5 минут», когда вы уже опаздываете на работу.
2. Я сказал: «Но я не могу представить, как это может помочь мне получить «до» фатальной ошибки». потому что я знаю, что я не могу этого сделать. Но я понятия не имею, почему мой таймер не работает в этом случае. Мне также помогло бы, если бы вы могли сказать, что нет возможности получить это на реальном сервере… (Я предполагаю, что мои обстоятельства не являются репрезентативными)
3. Я не думаю, что в PHP есть что-либо, что позволяет вам получить счетчик «текущего используемого времени выполнения». возможно, я ошибаюсь, но в любом случае это фатальная ошибка. вы не можете перехватить ошибку, и даже если бы вы МОГЛИ проверить этот таймер, ничто не помешало бы ему достичь максимума, пока он выполняет ваш код «ой, я почти на пределе» в любом случае.
4. И могу ли я изменить это сообщение на свой текст, таким образом, чтобы изменить только «формат» ошибки?
5. если не считать взлома исходного кода php, нет. нет способа контролировать эти ошибки из «внешнего» кода.