Как сохранить php-скрипт от тайм-аута из-за длинного запроса mysql

У меня есть запрос на обновление, выполняемый задачей cron, которая отключается. Запрос занимает в среднем пять минут для выполнения при выполнении в navicat.

Код выглядит примерно так. Это довольно просто:

// $db is a mysqli link set_time_limit (0); // should keep the script from timing out $query = "SLOW QUERY"; $result = $db->query($query); if (!$result) echo "error"; 

Несмотря на то, что сценарий не должен таймаутировать, время ожидания ожидания вызова sql по-прежнему, по-видимому, зависит от тайм-аута.

Есть ли асинхронный вызов, который можно использовать? Или настроить таймаут?

Является ли тайм-аут другим, потому что он вызывается из командной строки, а не через Apache?

благодаря

У меня была такая же проблема, как и где-то, и «решил» ее с помощью следующего кода (первые две строки моего файла):

 set_time_limit(0); ignore_user_abort(1); 

Согласно руководству :

Примечание . Функция set_time_limit () и директива конфигурации max_execution_time влияют только на время выполнения самого скрипта. Любое время, затрачиваемое на активность, которое происходит вне выполнения сценария, например системные вызовы с использованием system (), потоковые операции, запросы к базе данных и т. Д., Не включается при определении максимального времени выполнения сценария.

Поэтому вряд ли это связано с временными ограничениями PHP. Какое сообщение вы получаете, когда время истекает? Возможно, есть настройка MySQL.

Ваш php работает в безопасном режиме? Цитата из руководства PHP по set_time_limit :

Эта функция не действует, когда PHP работает в безопасном режиме. Обходного пути нет, кроме отключения безопасного режима или изменения временного ограничения в php.ini.

Предполагая, что вы работаете в Linux, системы на базе Debian имеют отдельные конфигурации для mod_php / php cgi и php-cli. Это не должно быть слишком сложно настроить в другой системе Linux, которая не разделяет конфигурацию cgi / cli.

Если у вас есть отдельные конфиги, я бы скорректировал вашу конфигурацию php cli. Отключить безопасный режим и любые ограничения по времени и пределы помех.

Проверьте некоторые из предельных переменных ресурса в php, ini: max_execution_time, max_input_time, memory_limit

Вы также можете установить лимит времени для скрипта в самом PHP: http://ca3.php.net/set_time_limit