Выполнение PHP скриптов: инструменты и методы администратора

Раздел: Администрирование -> Команды выполнения

Выполнение PHP скриптов в системе: обзор способов

В администрировании серверов часто требуется выполнять PHP скрипты без веб-интерфейса для автоматизации, обработки данных, интеграции. Ниже рассмотрены основные методы запуска PHP кода, их особенности и типичные проблемы.

Как запустить PHP скрипт из командной строки с аргументами?

Наиболее эффективный способ для администратора - использование интерпретатора PHP в командной строке (CLI). Скрипт запускается командой:

php /var/www/scripts/backup.php --type=full --output=/backup

выполнение скриптов php (выполнение php скриптов)

Аргументы передаются через пробел. Внутри скрипта их можно получить с помощью переменной $argv (массив) и $argc (количество). Для разбора опций рекомендуется функция getopt().

Типичные ошибки: отсутствие прав на выполнение (chmod +x), неверный путь к интерпретатору (полный путь /usr/bin/php). Если скрипт использует модули, недоступные в CLI (например, расширения для веба), может возникнуть ошибка "Class not found". Решение: проверить список модулей командой php -m и установить недостающие.

Как выполнить 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, обработка форм.

Проблемы: ошибки 502 Bad Gateway при неправильной конфигурации PHP-FPM, ошибки 404 для .php файлов при отсутствии директивы try_files. Решение: проверить логи ошибок веб-сервера (/var/log/nginx/error.log).

Как запустить меньшие фрагменты кода без создания файла (интерактивная оболочка)?

Команда php -a открывает интерактивную оболочку, где можно вводить PHP код построчно. Пример сеанса:

php -a\nInteractive shell\nphp > echo "Hello, World!";\nHello, World!\nphp > 

Для выхода используется exit; или Ctrl+D. Подходит для быстрой проверки синтаксиса, тестирования выражений.

Неудобно для многострочного кода; чтобы вставить блок, можно использовать .php файл и require. Также оболочка не поддерживает автодополнение.

Как выполнить один PHP скрипт из другого скрипта?

Функции exec(), shell_exec(), system() позволяют запускать внешние команды, в том числе PHP. Пример:

$command = 'php /scripts/worker.php ' . escapeshellarg($data);\nexec($command, $output, $return_var);\nif ($return_var !== 0) { echo "Ошибка выполнения"; }

Цель: асинхронное выполнение задач, запуск воркеров из веб-скрипта. Важно экранировать аргументы функцией escapeshellarg().

Ошибки: неверный путь к PHP, отсутствие прав на выполнение, скрипт зависает из-за бесконечного цикла (необходим таймаут через set_time_limit() в дочернем скрипте).

Как запустить тестовый веб-сервер без установки 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 (необходимо прописывать /usr/bin/php). Окружение отличается от пользовательского, переменные PATH и HOME могут быть не установлены. Решение: указывать абсолютные пути, при необходимости загружать окружение через .bashrc.

Расширенные примеры выполнения 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 секунд скрипт завершается, выводится сообщение)

Выполнение PHP скриптов - comments

En
выполнение скриптов php (php)