Использовать PHP для выполнения системной команды с длительным периодом ожидания? - PullRequest
2 голосов
/ 28 февраля 2012

Нам нужно распаковать / разархивировать очень большой архивный файл на сервере, к которому у нас нет доступа по SSH.Один из наших альтернативных вариантов - выполнить системную команду через PHP, чтобы распаковать файл.

Проблема в том, что для распаковки / распаковки файла требуется много времени.У PHP заканчивается тайм-аут до его завершения.

Есть ли способ заставить команду untar выполняться полностью вне зависимости от того, истек ли тайм-аут сценария PHP или нет?Как асинхронное выполнение?

Или как вы можете временно установить очень большой период ожидания PHP, чтобы у него было достаточно времени, чтобы завершить распаковку файла?

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Из руководства :

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

Возможно, ваш клиент (браузер) истекает. Такое отключение может привести к прерыванию работы сценария. Чтобы предотвратить это, вы можете сделать:

ignore_user_abort(true);

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

0 голосов
/ 28 февраля 2012

Если сервер работает в системе * nix, команда nohup может быть доступна.то есть

nohup tar ... >outfile.txt

После этого PHP-скрипт может сканировать файл outfile.txt до завершения операции

0 голосов
/ 28 февраля 2012

Это следует делать, если конфигурация вашего сервера не мешает вам изменить эти значения:

set_time_limit( 0);
ini_set( 'max_execution_time', 0);

См. set_time_limit и max_execution_time.

...