Как сохранить php-скрипт от тайм-аута из-за длинного запроса MySQL - PullRequest
12 голосов
/ 13 декабря 2008

У меня есть запрос на обновление, выполняемый задачей 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?

Спасибо

Ответы [ 5 ]

34 голосов
/ 13 декабря 2008

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

set_time_limit(0);
ignore_user_abort(1);
4 голосов
/ 13 декабря 2008

Согласно инструкции :

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

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

2 голосов
/ 13 декабря 2008

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

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

0 голосов
/ 13 декабря 2008

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

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

0 голосов
/ 13 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...