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


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

“Bash? Беляш? Гм. Що? Як? Чому”? – якщо саме ці слова вимовляв Ваш внутрішній голос, коли Ви, начитавшись статей в Інтернеті, вирішили за допомогою Bash автоматизувати рутинну задачу, то ця стаття для Вас. І вона ще більше для Вас, якщо Ви вже знаєте PHP – зараз Ви дізнаєтеся також, що PHP чудово підходить не лише для розробки сайтів, але й для консольних додатків.

 


Передбачається, що Ви використовуєте Linux і знаєте PHP не нижче початкового рівня:


Що таке PHP CLI?

Отже, ось як виглядає найпростіший додаток на PHP:

<?phpecho "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<?phpecho "Мене можна запустити без 'php ' перед моєю назвою";

Якщо назвати його myapp (без розширення), то за умови, що Ви знаходитеся в теці з файлом, запустити його можна буде ось так:

myapp

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

mv myapp /usr/bin/myapp

Невеликий приклад реального коду для закріплення знань: FastAdminer – консольний PHP-додаток, у якому використовується все описане в статті.

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *