Написание консольных скриптов на PHP (Rating: +1)

Print RSS
Статья не для гуру =)
Писать консольные скрипты приходится не часто, но всё-таки приходится. Не учить же для этого Shell (хотя знание его желательно), тем более, если надо что-то срочно написать и из языков вам известен только PHP. В этой статье я раскажу о написании консольных скриптов на PHP для Linux.
Итак, открываем терминал и создадим для начала какой-то тестовый файл:
$ touch test
Сделаем его исполняемым:
$ chmod +x test
Теперь возьмёмся за его редактирование:
$ nano test
и напишем туда следующее
#!/usr/bin/php
<?php
echo 'Привет, мудак))';
?>
дальше Ctrl+X и сохраняем файл. Первая строка обозначает путь к интерпритатору, дальше идёт PHP-код. Собственно и простенький скрипт готов. Можно запустить
$ ./test 
То что выведет думаю понятно =)
Напишем в содержимое файла следующее
#!/usr/bin/php
<?php
print_r($_SERVER);
?>
и запустим. Выведет что-то наподобии этого

Array
(
[rvm_gemsets_path] => /home/fuelen/.rvm/gemsets
...........
[PATH_TRANSLATED] => ./test
[DOCUMENT_ROOT] =>
[REQUEST_TIME] => 1310847154
[argv] => Array
(
[0] => ./test
)

[argc] => 1
)
Обратите внимание на последние 2 элемента массива: argv и argc. Первый - массив значений, переданных через командрую строку; второй - число значений. Всегда будет как минимум 1 элемент в массиве - это адрес скрипта. Эти переменные также доступны просто как $argc и $argv. Изменим наш скрипт и запишем туда следующее
#!/usr/bin/php
<?php
//распечатываем содержимое массива только тогда
//когда есть доп. параметры
if($argc >1){
    print_r($argv);
}
?>
Запустим скрипт, добавив немного параметров:
$ ./test ololo blblbl
На экране мы увидим следующее

Array
(
[0] => ./test
[1] => ololo
[2] => blblbl
)
Наверное у вас возник вопрос как получить какое-то значение при исполнении скрипта? Очень просто
<?
$a = trim(fgets(STDIN));
Переменной $a будет считана 1 строка из STDIN (подробнее о потоках ввода и вывода смотреть тут).
Ну и на останок простенький скрипт, который будет получать данные в процессе исполнения скрипта:
#!/usr/bin/php
<?php
echo "ваше имя: \n";
$name = trim(fgets(STDIN));
echo "ваша фамилия:\n";
$surname = trim(fgets(STDIN));
echo "кукареку $surname $name!!!\n";
?>
Added:
Rating: +1
Views: 3323
Comments (7) »