Как выполнить PHP код: от простого к сложному
Способы выполнения PHP кода
Как запустить PHP код с помощью встроенного веб-сервера?
Начиная с версии 5.4 PHP поставляется со встроенным веб-сервером. Это самый быстрый способ протестировать небольшой скрипт без настройки Apache или Nginx.
Процесс запуска:
- Создайте файл
index.phpс кодом. - Откройте терминал в папке с файлом.
- Выполните команду
php -S localhost:8000. - Откройте браузер по адресу
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-код, или для интеграции с другими утилитами.