Intereting Posts
Бот-блокирующий код игнорируется в htaccess? Запрос обновления MySQL обновляет один столбец, но не другой столбец Ошибка подключения к PHP: SQLSTATE Соединение отклонено Запуск команды ремесленников навсегда с кузницей laravel? Zend Debugger разбивается на каждый класс Zend Framework Отправка электронной почты через SMTP в zend framework Не удалось установить соединение с узлом smtp.gmail.com в laravel 5.2 Отчет о финансовом году в Php, проблема с выбором соответствующего года Вызовите некоторый JavaScript, когда пользователь закрывает окно (всплывающее окно) Laravel: Общая ошибка: 1615 Подготовленное заявление нужно переплатить Вы знаете какие-либо популярные PHP-шаблоны для php, которые имеют концепцию текущего контекстного узла? Более 640 000 элементов в массиве – проблема с памятью Загрузка композитора через скрипт PHP PHP – Защита цифровых загрузок Многострочный массив фреймов PHP

Тайм-аут Php Exec

У меня есть следующая команда exec() с символом & sign в конце, чтобы сценарий работал в фоновом режиме. Однако сценарий не работает в фоновом режиме. Это время в браузере через ровно 5,6 минут. Также, если я закрываю браузер, скрипт не работает.

  exec("/usr/local/bin/php -q /home/user/somefile.php &") 

Если я запустил скрипт через командную строку, он не истечет. Мой вопрос: как я могу предотвратить таймаут. Как запустить сценарий в фоновом режиме с помощью exec, чтобы он не зависел от браузера. Что я делаю неправильно и на что я должен смотреть.

exec() вызывается из вашей исполняемой программы, поэтому я предлагаю вам перенаправить выходы на /dev/null (файл с виртуальной записью, который автоматически потеряет все записанные вами данные).

Попробуйте запустить:

 exec("/usr/local/bin/php -q /home/gooffers/somefile.php > /dev/null 2>&1 &"); 

Примечание: 2>&1 перенаправляет вывод ошибки на стандартный вывод, а > /dev/null перенаправляет стандартный вывод в этот виртуальный файл.

Если у вас все еще есть трудности, вы можете создать скрипт, который просто выполняет другие скрипты. exec() следует за процессом, когда он выполняет задачу, но освобождается, когда задача завершена. если исполняемый скрипт просто выполняет другой, задача выполняется очень быстро, и exec выпускается одинаково.

Давайте посмотрим на реализацию. Создайте exec.php который содержит:

 <?php if (count($argv) == 1) { die('You must give a script to exec...'); } array_shift($argv); $cmd = '/usr/local/bin/php -q'; foreach ($argv as $arg) { $cmd .= " " . escapeshellarg($arg); } exec("{$cmd} > /dev/null 2>&1 &"); ?> 

Теперь запустите следующую команду:

 exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php > /dev/null 2>&1 &"); 

Если у вас есть аргументы, вы можете их также указать:

 exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php xyz > /dev/null 2>&1 &"); 

shell_exec() этого вам нужно будет использовать shell_exec() :

 shell_exec("/usr/local/bin/php -q /home/gooffers/somefile.php &"); 

При этом, если у вас есть доступ к оболочке, почему бы вам не установить это как cronjob? Я не уверен, почему скрипт PHP вызывает другой запуск такого типа.