Выполнение PHP скриптов: инструменты и методы администратора
Выполнение PHP скриптов в системе: обзор способов
В администрировании серверов часто требуется выполнять PHP скрипты без веб-интерфейса для автоматизации, обработки данных, интеграции. Ниже рассмотрены основные методы запуска PHP кода, их особенности и типичные проблемы.
Как запустить PHP скрипт из командной строки с аргументами?
Наиболее эффективный способ для администратора - использование интерпретатора PHP в командной строке (CLI). Скрипт запускается командой:
php /var/www/scripts/backup.php --type=full --output=/backupвыполнение скриптов php (выполнение php скриптов)
Аргументы передаются через пробел. Внутри скрипта их можно получить с помощью переменной $argv (массив) и $argc (количество). Для разбора опций рекомендуется функция getopt().
Как выполнить PHP скрипт через веб-сервер (Apache/Nginx)?
Этот вариант используется, когда скрипт должен быть доступен по URL и взаимодействовать с протоколом HTTP. Для Apache требуется модуль mod_php, для Nginx - PHP-FPM. Пример конфигурации виртуального хоста:
# Nginx: location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; ... }После настройки обращение к http://example.com/script.php выполнит скрипт. Цель: обслуживание динамических страниц, API, обработка форм.
Как запустить меньшие фрагменты кода без создания файла (интерактивная оболочка)?
Команда php -a открывает интерактивную оболочку, где можно вводить PHP код построчно. Пример сеанса:
php -a\nInteractive shell\nphp > echo "Hello, World!";\nHello, World!\nphp > Для выхода используется exit; или Ctrl+D. Подходит для быстрой проверки синтаксиса, тестирования выражений.
Как выполнить один PHP скрипт из другого скрипта?
Функции exec(), shell_exec(), system() позволяют запускать внешние команды, в том числе PHP. Пример:
$command = 'php /scripts/worker.php ' . escapeshellarg($data);\nexec($command, $output, $return_var);\nif ($return_var !== 0) { echo "Ошибка выполнения"; }Цель: асинхронное выполнение задач, запуск воркеров из веб-скрипта. Важно экранировать аргументы функцией escapeshellarg().
Как запустить тестовый веб-сервер без установки Apache или Nginx?
PHP содержит встроенный сервер разработки. Команда:
php -S localhost:8000 -t /var/www/publicСервер обрабатывает запросы, направляя их на файлы в указанной директории. Маршрутизация может быть настроена с помощью скрипта router.php:
php -S localhost:8000 router.phpИспользуется для разработки и тестирования, не предназначен для продакшена.
Как автоматизировать выполнение PHP скрипта по расписанию (cron)?
Для периодического запуска PHP скриптов используется планировщик cron. Пример записи в crontab:
*/5 * * * * /usr/bin/php /home/user/scripts/check.php >> /var/log/cron.log 2>&1Скрипт выполняется каждые 5 минут. Вывод перенаправляется в лог-файл. Цель: автоматическая очистка кэша, отправка писем, синхронизация данных.
Расширенные примеры выполнения PHP скриптов
Передача данных через стандартный ввод
Можно передавать данные в скрипт через STDIN, используя pipe. Это полезно для обработки потоковых данных из других команд.
echo '{"user":"admin","action":"backup"}' | php -r '$data = json_decode(file_get_contents("php://stdin"), true); print_r($data);'Array\n(\n [user] => admin\n [action] => backup\n)\n
Выполнение кода без файла с опцией -r
Опция -r позволяет выполнить PHP код непосредственно из командной строки без создания файла. Применяется для быстрых вычислений или проверки.
php -r 'echo "Этот код выполнен без файла\n"; for($i=0;$i<3;$i++) echo "Шаг $i\n";'Этот код выполнен без файла\nШаг 0\nШаг 1\nШаг 2\n
Запуск скрипта в фоне с nohup
Для выполнения длительных задач без привязки к терминалу используется nohup. Вывод перенаправляется в файл.
nohup php /home/user/long_script.php > /home/user/output.log 2>&1 &[1] 12345\n(процесс выполняется в фоне)
Встроенный сервер с собственным роутингом
Можно создать собственный роутер для встроенного сервера, чтобы обрабатывать запросы без использования Apache/Nginx.
// router.php\n$uri = $_SERVER['REQUEST_URI'];\nif ($uri === '/api/status') {\n header('Content-Type: application/json');\n echo json_encode(['status' => 'ok']);\n} else {\n return false;\n}\n// Запуск: php -S localhost:8080 router.php$ curl http://localhost:8080/api/status\n{"status":"ok"}Ограничение времени выполнения через timeout
Команда timeout из пакета coreutils позволяет принудительно завершить скрипт, если он выполняется дольше заданного времени.
timeout 10 php /home/user/slow_script.php || echo "Скрипт превысил лимит времени"(при превышении 10 секунд скрипт завершается, выводится сообщение)