Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

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

Отредактировано

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

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

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

Если вы совсем не знаете PHP

1. Текстовый курс;

2. Видеокурс.

Что такое PHP CLI

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

			<?php
echo "Hello world";
		

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

			php hello_world.php
		

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

			Hello world
		

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

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

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

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

			php script.php arg1 arg2 arg3
		

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

			array(4) {
  [0]=>
  string(10) "script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}
		

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

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

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

			$line = readline('Сообщение, которое будет выведено перед запросом');
echo 'Вы ввели: ' . $line;
		

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

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

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

			system('clear');
		

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

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

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

			echo "\e[1m жирный \e[0m";
echo "\e[3m курсив \e[0m";
echo "\e[4m нижнее подчеркивание \e[0m";
		

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

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

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

			php название_скрипта.php
		

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

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

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

			#!/usr/bin/php
		

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

			myapp
		

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

			mv myapp /usr/bin/myapp
		

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

Следите за новыми постами
Следите за новыми постами по любимым темам
21К открытий21К показов