@rinaz22

Почему sleep не работает в linux хостинге?

Всем привет! Делаю long polling. Сначала работал на локалке Open Server (Windows). Загрузил на хостинг и скрипт перестал работать.
Делаю бесконечный цикл while (true) с задержкой на 2 секунды sleep(2). На хостинге не работает, а на локалке все прекрасно работает. Техподдержка хостинга ответила, что это может быть из-за того, что хостинг работает на linux, а у меня windows. Действительно ли это так? И если да, то как это можно решить?
Пример кода:
$set_time_limit = 5;
register_shutdown_function( "fatal_handler" );
function fatal_handler() {
  global $new_count, $set_time_limit;
  $error = error_get_last();
  if ($error['message'] == "Maximum execution time of $set_time_limit seconds exceeded") {
    // header('HTTP/1.1 200 OK');
    exit("OK");
  } else {
		print_r($error);
	}
}

date_default_timezone_set('Asia/Aqtau');
set_time_limit($set_time_limit);

while (true) {
  sleep(2); // Если sleep убрать, то все работает(через 5 секунд выводит OK)
}
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 2
@qid00000000
Мало что знаю, но информацию найду в гугле
На хостинге какой веб сервер?

max_execution_time какой установлен?

Зачем вам вечный цикл? Большинство хостинг провайдерам, подобный код в основном проблемы доставит (особенно, если запускать через веб сервер в несколько процессах).

Какой код ответа от сервера вы получаете?

Есть ли связка из nginx + apache ? Если да, то какие таймауты соединения настроены?

Через сколько часов/минут хостинг провайдер ваш убивает процессы?

Что выводиться в errors_log?

Я могу ещё накидать с десяток правильно поставленных вопросов, на которые вам могут дать ответ.

На вопрос, почему у меня не работает, а тут нет, можно дать ответ, что вы что-то не так делаете. В чем-то, я понимаю ТП хостинга, к которому вы обращались.

Настоятельно рекомендую, для получения полезного ответа, формируйте нормальные вопросы.

А ещё, на виртуальном хостинге, не создавайте демонов (процессы, висящие в фоне), никто этого не любит и за милую душу навесит ограничения на ваш сайт/аккаунт.
Ответ написан
@krundetz
Техподдержка такая техподдержка. Они всегда будут перекладывать ответственность на вас, у них работа такая. Ну и компетенции не те иначе бы они работали не в поддержке, а в разработке.

На самом деле в php.ini можно запретить выполнение любой внутренний функции директива disable_functions

остальное проверяйте по инструкции qid00000000

смотреть все это лучше через phpinfo(); так как для cli режима может использоваться другой php.ini

что не сможете выяснить сами, например тайминги на серверах, требуйте с техподдержки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы