Подробное руководство по запуску PHP скриптов

Раздел: Основы PHP -> Выполнение PHP-кода

Способы запуска PHP скрипта

Основной и наиболее простой способ для разработки - использование встроенного веб-сервера PHP. Он не требует установки Apache или Nginx и запускается командой:

php -S localhost:8000

Php запуск скрипта (запуск php-скрипта)

После этого все файлы в текущей директории становятся доступны по адресу http://localhost:8000. Например, создав файл index.php с кодом:

<?php echo "Hello, World!";

Можно открыть браузер и увидеть результат. Этот способ удобен для локальной разработки и тестирования. Однако он не подходит для production из-за однопоточности.

Типичная ошибка: порт 8000 уже занят. Решение: указать другой порт, например php -S localhost:8080. Также возможна проблема с маршрутизацией - если используется фронт-контроллер, необходимо указать скрипт маршрутизации: php -S localhost:8000 public/index.php.

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

CLI позволяет выполнять PHP скрипты без веб-сервера. Это полезно для автоматизации, обработки данных, консольных инструментов.

php script.php

Если скрипт требует аргументы, их можно передать через пробел: php script.php arg1 arg2. Внутри скрипта аргументы доступны через $argv и $argc.

Ошибка: команда php не найдена. Решение: добавить путь к PHP в PATH или указать полный путь, например /usr/bin/php script.php. Возможен конфликт версий - используйте php8.1 script.php.

Как выполнить PHP скрипт через Apache с mod_php?

Apache с mod_php обрабатывает .php файлы как CGI. Достаточно поместить файл в DocumentRoot. Скрипт выполняется при обращении по URL.

# /var/www/html/index.php
<?php phpinfo(); ?>

Установка: Ubuntu sudo apt install libapache2-mod-php, затем sudo a2enmod php и перезапуск Apache.

Ошибка 404: файл не найден. Проверьте пути. Если скрипт выводится как текст, mod_php не активирован. Выполните установку и перезапустите Apache.

Как запустить PHP с Nginx и PHP-FPM?

Nginx перенаправляет запросы на .php файлы сокету PHP-FPM. Настройка в файле конфигурации Nginx.

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}

Перезапуск: sudo systemctl restart nginx php8.1-fpm.

Ошибка 502: PHP-FPM не запущен. Проверьте статус sudo systemctl status php8.1-fpm. Убедитесь в существовании сокета или используйте порт 9000.

Как запустить PHP скрипт по расписанию через cron?

Cron выполняет скрипты в заданное время. Добавьте задачу в crontab.

0 * * * * /usr/bin/php /home/user/script.php

Важно указывать полные пути. Перенаправление вывода: > /home/user/log.txt 2>&1.

Скрипт не выполняется: неверный путь, относительные пути. Решение: внутри скрипта использовать chdir(__DIR__) или абсолютные пути.

Как запустить PHP скрипт из другого скрипта через exec?

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

<?php
$output = shell_exec('php /path/to/script.php --option value');
echo $output;
?>

Для асинхронного запуска добавьте > /dev/null 2>&1 &.

Опасность инъекций: экранируйте аргументы через escapeshellarg(). Выполнение может быть заблокировано disable_functions.

Как запустить PHP скрипт в Docker контейнере?

Docker обеспечивает изолированное окружение. Используйте образ с Apache или PHP-FPM.

FROM php:8.1-apache
COPY . /var/www/html/
EXPOSE 80

Сборка и запуск: docker build -t my-app . && docker run -p 8080:80 my-app.

Порт занят: измените маппинг. Код не обновляется: используйте volumes. Проблемы с правами: укажите пользователя www-data.

Как запустить PHP в интерактивном режиме (php -a)?

Интерактивная оболочка PHP позволяет выполнять код построчно, что удобно для быстрого тестирования.

php -a
php > echo "hello";
hello
php >

Выход из режима: exit или Ctrl+D.

Интерактивный режим может не поддерживать некоторые расширения. Также он не подходит для запуска целых скриптов.

Расширенные примеры запуска PHP скриптов

Пример 1: Встроенный сервер с кастомным маршрутизатором. Создайте файл router.php:

Пример
<?php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($path === '/') {
    echo 'Home page';
} else {
    return false; // default static file serving
}
?>

Запустите сервер с указанием маршрутизатора: php -S localhost:8000 router.php. Откройте http://localhost:8000 - увидите "Home page". Для других путей сервер будет искать файлы.

Home page

Пример 2: Выполнение скрипта с аргументами и захват вывода через proc_open для большего контроля.

Пример
<?php
$descriptorspec = array(
    0 => array("pipe", "r"),  // stdin
    1 => array("pipe", "w"),  // stdout
    2 => array("pipe", "w")   // stderr
);
$process = proc_open('php worker.php --name=Alex', $descriptorspec, $pipes);
if (is_resource($process)) {
    fclose($pipes[0]);
    $stdout = stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    $stderr = stream_get_contents($pipes[2]);
    fclose($pipes[2]);
    $return_value = proc_close($process);
    echo "stdout: $stdout\n";
    echo "stderr: $stderr\n";
}
?>

Этот подход позволяет читать stderr и код возврата. Пример вывода: stdout: Hello, Alex! (stderr пуст).

stdout: Hello, Alex!
stderr: 

Пример 3: Запуск PHP-FPM вручную с нестандартной конфигурацией.

Пример
php-fpm8.1 --fpm-config /etc/php/8.1/fpm/php-fpm.conf --nodaemonize

Этот режим запускает FPM на переднем плане, удобно для отладки. Ошибки конфигурации выводятся в консоль.

Пример 4: Выполнение PHP кода прямо в командной строке с флагом -r (run).

Пример
php -r "echo 'Current time: ' . date('H:i:s');"
Current time: 14:35:22

Полезно для быстрых вычислений. Не требует создания файла.

Пример 5: Запуск нескольких скриптов параллельно с использованием pcntl_fork (только Unix).

Пример
<?php
$pid = pcntl_fork();
if ($pid == -1) {
    die('Could not fork');
} else if ($pid) {
    // Parent
    pcntl_wait($status);
} else {
    // Child
    exec('php another_script.php');
    exit;
}
?>

При таком подходе родительский процесс ждет завершения дочернего. Для параллельного выполнения нескольких задач создается несколько форков.

Пример 6: Использование systemd timer для запуска PHP скрипта (аналог cron на современных системах).

Пример
[Unit]
Description=My PHP task

[Service]
ExecStart=/usr/bin/php /opt/scripts/task.php
Type=oneshot

[Timer]
OnCalendar=daily

[Install]
WantedBy=timers.target

Поместите файл в /etc/systemd/system/my-task.service и my-task.timer, затем активируйте таймер: sudo systemctl enable --now my-task.timer. Преимущество в более гибком управлении по сравнению с cron.

Запуск PHP-скрипта - comments

En
Php запуск скрипта (php)