php работа с командной строкой

Php работа с командной строкой

Существенные отличия CLI SAPI от других SAPI :


Хотя в CGI SAPI имеется способ подавления HTTP-шапок, эквивалентного переключателя для их включения в CLI SAPI нет.

Примечание: эти директивы не могут быть инициализированы другим значением из файла конфигурации php.ini или специального файла (если специфицирован). Это является некоторым ограничением, поскольку эти значения по умолчанию применяются после разбора всех файлов конфигурации. Однако их значение может быть изменено на этапе прогона программы (что не имеет смысла для всех других директив, например, для register_argc_argv).

Легче работать в среде оболочки, когда определены следующие константы:

Таблица 24-2. Специфические CLI-константы

Вам не нужно явно закрывать эти потоки, это делается РНР автоматически.

CLI SAPI не изменяет текущую директорию на директорию исполняемого скрипта!

Пример, показывающий отличие CGI SAPI :

Это ясно показывает, что PHP изменяет свою текущую директорию на директорию исполняемого скрипта.

Использование CLI SAPI даёт:

Сказать PHP выполнить определённый файл.

Передать PHP код для выполнения непосредственно из командной строки.

Особого внимания требует замена переменных оболочки и использование кавычек.

Вы не можете комбинировать эти три способа при выполнении кода.

Приняв, что файл называется test и находится в текущей директории, мы можем выполнить:

Таблица 24-3. Опции командной строки

Отображать синтаксис в цвете.

Отобразить исходный текст без комментариев и пробелов.

Разбирает и выполняет данный файл. Этот переключатель является необязательным и может быть опущен. Достаточно предоставить имя файла для выполнения.

Записывает PHP, PHP SAPI и Zend-версии в стандартный вывод, например:-c

Запускает PHP интерактивно.

Генерирует расширенную информацию для debugger/profiler.

Пример, выводящий ошибку разборщика:

Если вы используете оболочку/shell иначе, чем sh/bash, у вас могут появиться новые вопросы. Отправляйте bug report или mail по адресу phpdoc@lists.php.net. Можно легко столкнуться с проблемами при попытке получить переменные оболочки в коде или использовании обратных слэшей (/) для замен/escaping.
Вы предупреждены.

-hС помощью данной опции вы можете получить информацию о действующем списке опций командной строки и небольшое описание их работы.

Пример 24-1. Скрипт, предназначенный для запуска из командной строки (script.php)
Пример 24-2. Пакетный/Batch-файл для запуска PHP-скрипта в командной строке (script.bat)

См. также в документации по расширению Readline о функциях, которые можно использовать для усовершенствования вашего РНР-приложения для командной строки.

Источник

Command Line Interface в PHP

До этого момента мы с Вами знали, что PHP работает на сервере. Клиент обращается к серверу по протоколу HTTP с каким-либо запросом, запрос на сервере обрабатывается и формируется ответ. После этого клиенту снова по протоколу HTTP в ответе отдаётся сформированный ответ. Однако, если взять какой-нибудь более-менее продвинутый сайт, то мы увидим, что есть задачи, которые не решаются стандартным клиент-серверным путем. Например: поздравлять пользователей с днём рождения и дарить им скидку на какой-нибудь продукт. Для того, чтобы это сделать, нам придется обновлять раз в день php-скрипт в браузере, чтобы он выбирал пользователей, у которых сегодня ДР, затем создавал для них скидки, и отправлял им сообщения по почте. Согласитесь, неудобно это делать вручную и в браузере. Для таких случаев в PHP предусмотрен Command Line Interface (CLI) – интерфейс командной строки.

CLI позволяет запускать программы на PHP не через привычную нам клиент-серверную архитектуру, а как простые программы в командной строке. Давайте создадим простейший скрипт, чтобы показать, как это работает. Создаём новую папку bin в корне проекта, а в ней файл – cli.php.

php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

Пишем простейший код:

А теперь запускаем консоль из OpenServer:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

Переходим в папку с нашим проектом, выполнив:

И пишем следующую команду:

Написали простейшее консольное приложение! Уже неплохо. Но что если мы захотим сложить 2 числа, которые нужно передать скрипту? Как Вы понимаете, сделать это с помощью GET- или POST- запросов уже не получится. Так как же быть?

Аргументы консольного приложения

На помощь нам приходят аргументы, которые мы можем передать в скрипт, указав их после имени скрипта в командной строке. Вот так:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

Давайте теперь запустим наш скрипт с параметрами:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

Как видим, наши аргументы попали в этот массив. Давайте напишем простейший скрипт, который будет складывать все переданные ему аргументы.

Запустим его, и убедимся, что все работает:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

И он действительно работает: 3 + 4 + 5 = 12.

А что если мы хотим передавать аргументы с именами? Вроде такого:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

И затем в коде получать их в коде по их именам? Для этого нам следует написать простейший парсер, который будет находить вот такие именованные параметры и их значения. Пишем.

И проверяем его работу:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

Отлично, теперь мы можем обращаться к элементам массива params, чтобы выяснить, были ли нам переданы какие-то аргументы или нет.

CLI и ООП

Мы с вами изучили некоторые основы работы с CLI. Давайте теперь перенесем эти знания на объектно-ориентированный подход и научимся работать через интерфейс командной строки с объектами.

Для этого нам понадобится создать отдельную директорию под «команды». Команды – так мы будем называть наши специальные классы, которые будут выполнять какой-то код через запуск из командной строки. Создаем новую директорию: src/MyProject/Cli.
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

В конструкторе класса мы принимаем список параметров, сохраняем их, а затем вызываем метод checkParams(), который проверяет наличие обязательных параметров для этого скрипта. В нём просто поочередно вызывается метод для проверки в массиве нужных ключей. Если их нет – метод кинет исключение. И, наконец, есть метод execute(), который содержит бизнес-логику. В нем используется метод getParam(), который вернет параметр (при его наличии), либо вернет null (при его отсутствии).

И также создаём исключение, специально для ошибок, возникающих при работе с CLI.

Теперь давайте снова вернемся в нашу точку входа для консольных приложений cli.php. Этот файл можно назвать фронт-контроллером для консольных команд, он как index.php в случае с клиент-серверным подходом будет создавать другие объекты и запускать весь процесс.

Дополним этот код так, чтобы он создавал экземпляр нужного класса и передавал ему аргументы.

Теперь мы можем запустить наш скрипт с помощью вот такой команды:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

Если мы захотим создать еще один класс, в котором мы будем вычитать из аргумента a аргумент b, то нам нужно будет продублировать довольно большой объем кода. Но ведь если присмотреться – большую часть кода из класса Summator можно вынести в отдельный класс и использовать его повторно.

Давайте создадим абстрактный класс, который будет заниматься тем, что будет сохранять переданные в него параметры и запускать метод для их проверки.

Теперь нам в классе Summator достаточно отнаследоваться от этого класса и он значительно упростится:

Запустим скрипт снова и убедимся, что все успешно отработало:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

Давайте создадим по аналогии скрипт, который будет вычитать из аргумента x аргумент y.

Проверим его в деле:
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

А теперь давайте попробуем не указать один из аргументов – получим ошибку.
php работа с командной строкой. Смотреть фото php работа с командной строкой. Смотреть картинку php работа с командной строкой. Картинка про php работа с командной строкой. Фото php работа с командной строкой

Вот таким вот нехитрым образом мы с вами научились создавать простейшие программы для запуска в консоли на PHP. А в следующем уроке мы с вами научимся запускать эти команды по расписанию.

Источник

Php работа с командной строкой

Основные отличия CLI SAPI от остальных реализаций SAPI :

В отличие от CGI SAPI заголовки не пишутся в поток вывода.

Несмотря на то, что в CGI SAPI есть способ подавить HTTP-заголовки, в CLI SAPI нет возможности их включить.

Сообщения об ошибках выдаются в текстовом режиме (без HTML-форматирования).

Таблица 43-1. Переопределяемые директивы php.ini

Благодаря значению TRUE в CLI SAPI вам всегда доступны переменные argc (количество аргументов при запуске приложения) и argv (массив текущих аргументов).

Замечание: Эти директивы не могут быть инициализированы другими значениями из конфигурационного файла php.ini или любого другого (в случае, если он указан). Это является ограничением, поскольку указанные выше значения по умолчанию применяются после обработки конфигурационных файлов. Тем не менее, эти значения могут быть изменены во время работы скрипта (хотя это не имеет особого смысла для указанных директив, например, для register_argc_argv ).

Облегчена работа с консолью, благодаря следующим определенным константам:

Таблица 43-2. Специфические CLI-константы

Также вам не надо закрывать эти потоки, PHP автоматически закрывает их после завершения скрипта.

CLI SAPI не изменяет текущую директорию на директорию исполняемого скрипта!

Пример, демонстрирующий отличие CGI SAPI :

// Простейший тестовый скрипт под названием test.php
echo getcwd (), «\n» ;
?>

В случае, если используется CGI версия, результат работы будет следующим:

Это наглядно демонстрирует тот факт, что PHP изменяет текущую директорию на директорию исполняемого скрипта.

Это позволяет писать более гибкие консольные скрипты на PHP.

CLI SAPI имеет три различных способа получения PHP-кода, который необходимо выполнить:

Указать PHP на исполнение конкретного файла.

Указать PHP-код для выполнения непосредственно в командной строке.

Особого внимания требует подстановка переменных окружения и использование кавычек.

Это позволяет динамически создавать PHP-код и переадресовывать его исполняемому модулю, как показано в следующем (вымышленном) примере:


Вы не можете комбинировать эти три способа выполнения кода.

Полные названия опций доступны, начиная с PHP 4.3.3.

Таблица 43-3. Опции, доступные из командной строки

Отображает исходный код с цветной подсветкой

Отображает исходный текст без комментариев и пробельных символов.

Выводит информацию о версии PHP, PHP SAPI и Zend, например:

ОпцияПолное названиеОписание
-s—syntax-highlight

Примеры (переводы строк использованы, чтобы сделать текст более читаемым):

Запускает PHP в интерактивном режиме.

Генерирует дополнительную информацию для отладчика и профайлера.

Подгружает дополнительный модуль Zend. В случае, если указано только имя файла, PHP ищет модуль в текущем пути к библиотекам по умолчанию (в Linux-системах он обычно указан в /etc/ld.so.conf ). В случае, если указано имя файла и полный путь к нему, поиск в системных библиотеках не производится. Указание относительного пути к модулю приведет к поиску файла по указанному пути относительно текущей директории.

При использовании этой опции PHP напечатает список встроенных (а также подгруженных) модулей Zend и PHP.

Замечание: При использовании этого ключа следует быть очень осторожным и избегать недоразумений, связанных с автоматической подстановкой переменных окружения.

Если вы используете оболочку, отличную от sh/bash, у вас могут возникнуть другие вопросы. В таком случае создайте рапорт о возникшей проблеме на сайте http://bugs.php.net/ или напишите письмо по адресу phpdoc@lists.php.net. Вы вполне можете столкнуться с проблемами при попытке получить доступ к переменным оболочки или при работе с экранирующими обратными слешами. Мы вас предупредили.

Пример 43-1. Скрипт, предназначенный для запуска из командной строки (script.php)

Источник

Php работа с командной строкой

Существенные отличия CLI SAPI от других SAPI :


Хотя в CGI SAPI имеется способ подавления HTTP-шапок, эквивалентного переключателя для их включения в CLI SAPI нет.

Примечание: Эти директивы не могут быть инициализированы другим значением из файла конфигурации php.ini или специального файла (если специфицирован). Это является некоторым ограничением, поскольку эти значения по умолчанию применяются после разбора всех файлов конфигурации. Однако их значение может быть изменено на этапе прогона программы (что не имеет смысла для всех других директив, например, для register_argc_argv).

Легче работать в среде оболочки, когда определены следующие константы:

Таблица 24-2. Специфические CLI-константы

Вам не нужно явно закрывать эти потоки, это делается РНР автоматически.

CLI SAPI не изменяет текущую директорию на директорию исполняемого скрипта!

Пример, показывающий отличие CGI SAPI :

Это ясно показывает, что PHP изменяет свою текущую директорию на директорию исполняемого скрипта.

Использование CLI SAPI даёт:

Сказать PHP выполнить определённый файл.

Передать PHP код для выполнения непосредственно из командной строки.

Особого внимания требует замена переменных оболочки и использование кавычек.

Вы не можете комбинировать эти три способа при выполнении кода.

Приняв, что файл называется test и находится в текущей директории, мы можем выполнить:

Таблица 24-3. Опции командной строки

Отображать синтаксис в цвете.

Отобразить исходный текст без комментариев и пробелов.

Разбирает и выполняет данный файл. Этот переключатель является необязательным и может быть опущен. Достаточно предоставить имя файла для выполнения.

Записывает PHP, PHP SAPI и Zend-версии в стандартный вывод, например:-c

Запускает PHP интерактивно.

Генерирует расширенную информацию для debugger/profiler.

Пример, выводящий ошибку разборщика:

Если вы используете оболочку/shell иначе, чем sh/bash, у вас могут появиться новые вопросы. Отправляйте bug report или mail по адресу phpdoc@lists.php.net. Можно легко столкнуться с проблемами при попытке получить переменные оболочки в коде или использовании обратных слэшей (/) для замен/escaping.
Вы предупреждены.

-hС помощью данной опции вы можете получить информацию о действующем списке опций командной строки и небольшое описание их работы.

Пример 24-1. Скрипт, предназначенный для запуска из командной строки (script.php)

Пример 24-2. Пакетный/Batch-файл для запуска PHP-скрипта в командной строке (script.bat)

См. также в документации по расширению Readline о функциях, которые можно использовать для усовершенствования вашего РНР-приложения для командной строки.

Источник

Php работа с командной строкой

Основные отличия CLI SAPI от остальных реализаций SAPI :


В отличие от CGI SAPI заголовки не пишутся в поток вывода.

Несмотря на то, что в CGI SAPI есть способ подавить HTTP-заголовки, в CLI SAPI нет возможности их включить.

Сообщения об ошибках выдаются в текстовом режиме (без HTML-форматирования).

Таблица переопределяемых директив php.ini

Благодаря значению TRUE в CLI SAPI вам всегда доступны переменные argc (количество аргументов при запуске приложения) и argv (массив текущих аргументов).

Замечание: Эти директивы не могут быть инициализированы другими значениями из конфигурационного файла php.ini или любого другого (в случае, если он указан). Это является ограничением, поскольку указанные выше значения по умолчанию применяются после обработки конфигурационных файлов. Тем не менее, эти значения могут быть изменены во время работы скрипта (хотя это не имеет особого смысла для указанных директив, например, для register_argc_argv).

Облегчена работа с консолью, благодаря следующим определенным константам:

Таблица специфических CLI-констант

Также вам не надо закрывать эти потоки, PHP автоматически закрывает их после завершения скрипта.

CLI SAPI не изменяет текущую директорию на директорию исполняемого скрипта!

Пример, демонстрирующий отличие CGI SAPI :

// Простейший тестовый скрипт под названием test.php
echo getcwd (), "\n" ;
?>

В случае, если используется CGI версия, результат работы будет следующим:

Это наглядно демонстрирует тот факт, что PHP изменяет текущую директорию на директорию исполняемого скрипта.

Это позволяет писать более гибкие консольные скрипты на PHP.

CLI SAPI имеет три различных способа получения PHP-кода, который необходимо выполнить:


Указать PHP на исполнение конкретного файла.

Указать PHP-код для выполнения непосредственно в командной строке.

Особого внимания требует подстановка переменных окружения и использование кавычек.

Это позволяет динамически создавать PHP-код и переадресовывать его исполняемому модулю, как показано в следующем (вымышленном) примере:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *