Размещено: 2024-01-28 22:53:41
Теги: php
ЗАПУСК КОНСОЛЬНЫХ СКРИПТОВ PHP
Прежде всего необходимо проверить, что бы скрипт корректно работал и попробовать запустить его через Shell-консоль. На некоторых хостингах по умолчанию все консольные команды запрещены. Что бы разрешить запуск на обычном хостинге через php необходимо снять запрет на консольные команды.
Заходим в ispmanager: WWW -> PHP -> Расширенная настройка PHP -> disable_functions и разрешаем команды: exec, shell_exec. Либо изменить disable_functions в php.ini, если к нему конечно есть доступ.
В самом простом виде команда на запуск php скрипта выглядит как:
shell_exec("php script.php");
Что бы запустить с определённой версией php нужно прописать путь до версии
Путь к интерпретатору PHP: /opt/alt/php53/usr/bin/php.
Найти этот путь можно на вкладке в ispmanager WWW -> WWW-домены -> Изменить -> Путь к интерпретатору PHP.
Что бы запустить с определённой версией php:
shell_exec("/opt/alt/php53/usr/bin/php script.php");
Путь к файлу указывается абсолютный от корневого каталога на сервере:
shell_exec("/opt/alt/php53/usr/bin/php /var/www/vh123456/data/www/site.ru/task.php");
Передача переменных
Что бы передать в выполняемый скрипт переменную, нужно дополнительно в конце команды прописать её:
shell_exec("/opt/alt/php53/usr/bin/php /var/www/vh123456/data/www/site.ru/task.php acbd");
Из самого скрипта её можно отловить с помощью $argv — массив переданных скрипту аргументов.
Содержит массив (array) всех аргументов, переданных скрипту при запуске из командной строки.
Первый аргумент $argv[0] всегда содержит имя файла запущенного скрипта. А начиная с 1-го идут переданные аргументы.
Асинхронное подключение скрипта - выполнение в фоновом режиме
Что бы не ждать выполнения скрипта и не блокировать основной поток работы программы, необходимо прописать дополнительно в конце команды
> /dev/null &
тогда скрипт запускается в фоновом режиме и не прерывает выполнение основной программы.
Что бы запустить скрипт, не ждать результат его выполнения, а получить pid процесса:
$pid=shell_exec("php /var/www/vh12345/data/www/site.ru/script.php >/dev/null 2>&1 & echo $!"); echo $pid;
Что бы узнать статус процесса: ps -p $pid, что бы завершить: kill $pid
На эту страницу чаще всего попадают по запросам: