Разработка консольных приложений и автоматизация задач на PHP: старый добрый язык как знакомая замена Bash

«Bash? Беляш? Эммм… Что? Как? По-че-му?» — если именно эти слова произносил ваш внутренний голос, когда вы, начитавшись статей в интернете, решили с помощью Bash автоматизировать ту рутинную задачу, то эта статья для вас. И она ещё более для вас, если вы уже знаете PHP — сейчас вы узнаете также то, что PHP отлично подходит не только для разработки сайтов, но и для консольных приложений.


Предполагается, что вы используете Linux и знаете PHP не ниже начального уровня:


Что такое PHP CLI

Итак, вот как выглядит самое простое приложение на PHP:

Но его можно запустить не только через браузер, но и через консоль. Если вы разместим этот код в файле с названием hello_world.php:

Вывод будет весьма ожидаемым:

В консольных PHP приложениях (CLI) вы можете использовать всё то, что и в обычных PHP приложениях, например, записывать и читать файлы функциями file_put_contents и file_get_contents.

Получение аргументов из командной строки

Менее знакомыми для обычных PHP-разработчиков являются функции для работы с командой строкой.

Если вы хотите передать из командой строки какие-либо аргументы в свой скрипт:

…то прочитать их из PHP можно с помощью глобальной переменной $argv. В данном случае её содержимое будет выглядеть вот так:

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

Чтение пользовательского ввода

Функция readline создана для запроса пользовательского ввода и используется следующим образом:

Выполнение сторонних приложений

Но когда возможностей стандартной библиотеки PHP не хватает, на помощь приходит функция system: с её помощью можно вызывать сторонние приложения.

Если нам, например, нужно стереть с экрана весь предыдущий вывод, то из PHP мы сможем сделать это вот так:

Это выполнит команду clear, как будто вы сами ввели её в консоль.

Форматирование вывода

Конечно, вы не можете выводить HTML-теги функцией echo, как вы делали раньше, и надеяться на отформатированный вывод, но возможность задать базовое оформление всё же остается благодаря так называемым эскейп-последовательностям:

Полный список вариантов форматирования.

Сокращенное написание

Ура, теперь вы знаете, как делать настоящие консольные приложения на PHP! Но, согласитесь, писать каждый раз

не очень то весело и даже немножко грустненько.

Но и эту проблему можно решить, просто добавьте в начало файла #!/usr/bin/php, где /usr/bin/php является адресом вашего PHP интерпретатора.

Итоговый файл должен получиться примерно таким:

Если назвать его myapp (без расширения), то при условии, что вы находитесь в папке с файлом, запустить его можно будет вот так:

А чтобы запускать ваше консольное приложение из любой существующей, нескольких несуществующих и одной невероятной папки, достаточно просто перенести его в каталог /usr/bin. Например, вот так:


Небольшой пример реального кода для закрепления знаний: FastAdminer — консольное PHP приложение, в котором используется всё описанное в статье.

Тарас Сереванн, эксперт в области IT магии