Как выполнить PHP код: от простого к сложному

Раздел: Программирование на PHP -> Инструменты разработки

Способы выполнения PHP кода

Как запустить PHP код с помощью встроенного веб-сервера?

Начиная с версии 5.4 PHP поставляется со встроенным веб-сервером. Это самый быстрый способ протестировать небольшой скрипт без настройки Apache или Nginx.

Процесс запуска:

  1. Создайте файл index.php с кодом.
  2. Откройте терминал в папке с файлом.
  3. Выполните команду php -S localhost:8000.
  4. Откройте браузер по адресу http://localhost:8000.
php -S localhost:8000

Сервер будет работать до нажатия Ctrl+C. Можно указать любой свободный порт. Если нужно использовать отдельный файл маршрутизации, добавьте его третьим аргументом.

Типичные ошибки:

  • Address already in use - порт занят. Используйте другой порт, например 8080.
  • No input file specified - сервер не нашёл файл. Проверьте пути или создайте router.php.

Как выполнить PHP скрипт из командной строки без веб-сервера?

Интерпретатор PHP можно вызывать напрямую для запуска файлов или произвольного кода.

Варианты:

  • php -f script.php - выполняет файл.
  • php -r 'echo "Hello";' - выполняет код из строки.
  • echo '<? echo "Hi";' | php - передача кода через конвейер.
php -r 'echo "Пример выполнения через -r";'
Пример выполнения через -r

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

Возможные проблемы:

  • Неэкранированные кавычки в строке с -r могут вызвать синтаксическую ошибку.
  • Для вывода ошибок удобно добавить ini_set('display_errors', 1);.

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

Существует много онлайн-песочниц: 3v4l.org, phptester.net, onlinephp.io. Они позволяют выполнить код и увидеть результат прямо в браузере.

Пример использования 3v4l.org: введите код, нажмите «Execute». Сервис показывает вывод, время выполнения и версию PHP.

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

Ограничения:

  • Нет доступа к файловой системе и внешним ресурсам.
  • Ограничено время выполнения и объём вывода.

Как изолировать PHP окружение с помощью Docker?

Docker позволяет запускать PHP в контейнере, что гарантирует одинаковую среду на любой машине.

Создайте файл Dockerfile с образом PHP и скопируйте код.


FROM php:8.2-cli
COPY index.php /app/index.php
WORKDIR /app
CMD ["php", "index.php"]
  

Соберите образ и запустите контейнер:

docker build -t php-app .
docker run --rm php-app

Этот способ подходит для тестирования в чистом окружении, а также для CI/CD.

Проблемы:

  • Требуется установленный Docker.
  • Взаимодействие с базой данных может потребовать настройки сети.

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

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

php -a
Interactive shell

php > echo 2+2;
4
php > exit

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

В Windows может потребоваться дополнительная настройка, но на Linux и macOS работает из коробки.

Расширенные примеры выполнения PHP кода

Встроенный сервер с собственным маршрутизатором

Создадим файл router.php для обработки всех запросов.

Пример

<?php
// router.php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($path === '/time') {
    echo date('Y-m-d H:i:s');
    return;
}
return false; // передать управление статическим файлам
?>
  

Запуск:

Пример
php -S localhost:8000 router.php

Теперь при переходе на http://localhost:8000/time сервер вернёт текущее время. Остальные пути будут обслуживаться как статические файлы.

Открыв http://localhost:8000/time:
2025-03-28 14:30:00
  

Ошибка: Если роутер не завершает скрипт return, сервер может выдать пустой ответ или ошибку.

Выполнение скрипта с аргументами командной строки

Передадим аргументы в файл hello.php.

Пример

<?php
// hello.php
if ($argc > 1) {
    $name = $argv[1];
    echo "Привет, $name!";
} else {
    echo "Привет, гость!";
}
?>
  

Запуск с аргументом:

Пример
php hello.php Мир
Привет, Мир!

Без аргумента:

Пример
php hello.php
Привет, гость!

Массив $argv содержит все параметры, $argc - количество. Это основа для создания консольных утилит.

Запуск PHP в Docker с внешней сетью (Docker Compose)

Пример docker-compose.yml для PHP и MySQL.

Пример

version: '3'
services:
  app:
    image: php:8.2-cli
    volumes:
      - ./src:/app
    working_dir: /app
    command: php index.php
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root
  

Файл src/index.php для подключения к MySQL:

Пример

<?php
$dsn = 'mysql:host=db;port=3306;dbname=test';
$pdo = new PDO($dsn, 'root', 'root');
echo "Подключение к БД выполнено успешно";
?>
  

Запуск:

Пример
docker-compose up
Подключение к БД выполнено успешно

Эта конфигурация изолирует сервисы и упрощает развёртывание.

Использование интерактивного режима с многострочным кодом

В php -a можно вводить многострочные блоки, если нажать Enter после открывающей фигурной скобки.

Пример

php > function square($x) { return $x * $x; }
php > echo square(5);
25
php > exit
  

Интерактивный режим поддерживает автодополнение по табуляции, историю команд и загрузку файлов через include.

Недостаток - сложно править длинный код заново при опечатке.

Выполнение кода из стандартного ввода с heredoc

В Linux/macos можно передать многострочный код через heredoc напрямую в интерпретатор.

Пример

php <<'EOF'
<?php
$arr = [1,2,3];
print_r($arr);
EOF
  
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
  

Такой способ удобен для скриптов, генерирующих PHP-код, или для интеграции с другими утилитами.

Запуск PHP кода - comments

En
Run php code (php)