В избранное    Домой   

Пятница,  19 Apr 2024 г., 13:41
Ибо так возлюбил Бог мир, что отдал Сына Своего единородного, дабы всякий, верущий в Него, не погиб, но имел жизнь вечную. Ибо не послал Бог Сына своего в мир, чтобы судить мир, но чтобы мир спасен был через Него.Верущий в Него не судится, а не верующий уже осужден, потому что не уверовал во имя единородного Сына Божия. /Евангелие от Иоанна/

 Логин:  

 Пароль: 




Анонсы:
=== Дата: 07/09/2011     Автор: Крис Ньюман ===

PHP. Урок 21 Выполнение PHP-сценариев в командной строке

Урок 21. Выполнение PHP-сценариев в командной строке

PHP разрабатывался для написания динамических Web-страниц. Но из-за большой мощности его стали применять для написания сценариев командной строки и даже для разработки приложений. В этом уроке вы узнаете, как использовать PHP в командной строке и создавать сценарии оболочки.

Среда командной строки

Для того чтобы запускать PHP-сценарии из командной строки, нужно установить интерпретатор PHP на данной системе. Для Web-среды он устанавливается как модуль Apache. Но для использования в интерфейсе командной строки (CLI) его нужно установить как самостоятельное приложение под названием php.

Отличие между исполняемыми файлами CLI и CGI

Начиная с версии 4.2, PHP содержит разные бинарные программы для CGI и CLI. Оба обработчика предоставляют тот же интерпретатор языка. Но версия CLI имеет следующие отличия, удобные для командной строки.

  • На вывод не передаются HTTP-заголовки.
  • Сообщения об ошибках не содержат HTML-форматирования.
  • Значения max_execution_time равно нулю, чтобы сценарий мог выполнятся неограниченное время.

Чтобы узнать о том, является программа php CGI- или CLI-версией, нужно запустить ее с параметром -v. тогда появляется информация о версии. Например, следующий вывод генерирует CLI-версия PHP 5.0.3:

PHP 5.0.3 (cli) (built: Dec 15 2004 08:07:57)
Copyright © 1997-2004 The PHP Group
Zend Engine v2.0.3, Copyright © 1998-2004 Zend Technologies

Значение в круглых скобках после версии PHP показывает используемый вариант серверного интерфейса (SAPI). Его можно определить с помощью функции php_sapi_name.

Версия для Windows. Версия для PHP 4.2. включает два исполняемых файла: CGI-версию с именем php.exe и CLI-версию с именем php-cli.exe. Для PHP 4.3 оба называются php.exe, но находятся, соответственно, в каталогах cgi и cli.
Для PHP 5 и выше php.exe является CLI-версией, а CGI-версия называется php-cgi.exe. Кроме того, есть php-win.exe – исполняемая версия, которая работает без вывода. Это позволяет пользователям не открывать окно с командной строкой.

Написание сценариев PHP для оболочки Linux/Unix

На платформах Linux/Unix сценарий оболочки — это текстовый файл, содержащий набор инструкций, которые обрабатываются соответствующим интерпретатором. Самый простой интерпретатор оболочки — Bourne Shell, или sh. Хотя в данный момент более популярна его улучшенная версия — Bourne Again Shell, или bash. Она полностью совместима с sh, но имеет больше полезных возможностей.

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

Расположение PHP. Выполняемый файл php обычно устанавливается в /usr/local/bin или /usr/bin, в зависимости от типа установки. И может находится вообще в другом месте. Команда which php позволяет его быстро найти.

Все сценарии оболочки начинаются с символов #!, после которых следует полный путь к интерпретатору команд. Для традиционных сценариев оболочки эта строка выглядит так:

#!/bin/sh

Для сценариев PHP она принимает следующий вид:

#!/usr/local/bin/php

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

$ chmod u+x myscript.php

C помощью следующей команды устанавливается разрешение на выполнение для всех пользователей:

$ chmod a+x myscript.php

Без флага выполнения сценарий выполняется, если подать его на вход интерпретатора PHP. Для этого вызывается команда php с аргументом имени файла. Две команды ниже — идентичны (параметр -f используется для большей ясности, но не является обязательным):

$ php myscript.php
$ php -f myscript.php

Название сценария. Нет каких-либо правил для именования сценариев оболочки. Но лучше оставить расширение .php. Тогда понятно, что это сценарий PHP. Сценарии Bourne shell иногда имеют расширение .sh, но чаще в названиях команды вообще не используется расширение.

PHP-сценарии командной строки для Windows

Windows не поддерживает альтернативные интерпретаторы команд. Поэтому, чтобы использовать PHP-сценарий в Windows, нужно передать название файла программе php.exe. Параметр -f – необязательный, поэтому два таких вызова эквивалентны:

> php.exe myscript.php
> php.exe -f myscript.php

Сценарии оболочки. Можно создать простой сценарий оболочки, который вызывает php.exe с нужным аргументом файла, чтобы запускать сценарий одной командой.
Для этого нужно создать файл myscript.bat. В нем нужно разместить команду php.exe и название сценария. После этого можно выполнять сценарий вводом слова myscript в командной строке.

Вставка PHP-кода

Как и для Web-среды, можно вставлять PHP-код в текст сценария. Любой текст, который находится за пределами дескрипторов <?php, передается на вывод.

Но обычно нужно создать сценарий полностью состоящий из PHP-кода. Поэтому в начале PHP-сценария для оболочки нужно поставить <?php. PHP позволяет создавать сценарии, которые выводят только часть элементов в больших статических текстовых файлах.

Написание сценариев для командной строки

В языке PHP есть механизмы, которые помогают писать сценарии для командной строки. Иногда их используют для Web-среды. Ниже приводится их описание.

Режим вывода символов

При генерировании Web-вывода используется дескриптор <br>, чтобы разделить строки. При выводе на Web-страницу символа перевода строки, \n, разрыв будет только в HTML-версии. При выводе в браузере он не заметен.

В сценариях командной строки используется только текстовый вывод, поэтому нужно использовать перевод строки для форматирования текста. Если сценарий генерирует произвольный вывод, нужно завершать его \n после вывода последнего элемента.

Можно получить преимущество от режима с фиксированной шириной символов при выполнении в командной строке, если использовать пробел для создания столбцов. Функция printf позволяет устанавливать ширину и задавать выравнивание символов. Это не дает соответствующего эффекта в HTML-выводе, если не использовать дескриптор <PRE>.

Аргументы командной строки

Можно передать аргументы сценарию оболочки. Для этого они указываются после имени сценария. Количество аргументов хранится в переменной $argc, а сами аргументы — в массиве с числовыми индексами $argv.

Аргументы. Названия argc и argv используются исторически. Изначально они применялись в языке С, а сейчас широко применяются во многих языках программирования. В PHP $argc создается только по договоренности. Можно вместо этого использовать count($argv), чтобы определить, сколько аргументов передается в сценарий.

Массив $argv всегда содержит как минимум один элемент, даже если дополнительные аргументы не передавались в сценарий. Просто $argv[0] содержит название сценария и тогда $argc равен 1.

Для сценария в листинге 21.1 нужно задать два аргумента. В противном случае выводится сообщение об ошибке, и выполнение завершается. На выходе получаем большее из этих двух аргументов.

Листинг 21.2. Использование параметров командной строки


#!/usr/local/bin/php
<?php
if ($argc != 3) {
    echo $argv[0] . ”: Нужно задать точно два параметра\n“;
    exit;
}

if ($argv[1] < $argv[2]) {
    echo $argv[1] . “ меньше чем ” . $argv[2] . “\n”;
}
elseif ($argv[1] > $argv[2]) {
    echo $argv[1] . “ больше чем ” . $argv[2] . “\n”;
}
else {
    echo $argv[1] . “ равно ” . $argv[2] . “\n”;
}
?>

Начальное условие в листинге 21.1 проверяет $argc на равенство 3. Такое число получается из двух параметров командной строки и названия сценария в элементе $argv[0]. Кроме того, $argv[0] используется при выводе сообщения об ошибке. Такой прием позволяет узнать имя сценария.

Потоки ввода-вывода

Для Web-окружения можно напрямую выводить данные в стандартные потоки ввода, вывода и ошибок. Но это чаще используется в сценариях командной оболочки.

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

Идентификаторы потока очень напоминают URL (нужно помнить, что PHP позволяет открыть URL с помощью функций доступа к файлам). Они начинаются с php://, после которого следует название потока. Следующее выражение открывает для чтения стандартный поток ввода:

$fp = fopen(“php://stdin”, “r”);

Доступ к потокам часто используется в сценариях командной строки, поэтому в PHP есть удобные сокращения. Константы STDIN, STDOUT и STDERR предоставляют непосредственный доступ к открытым потокам и не требуют вызова fopen.

Сценарий в листинге 21.2 использует три стандартных потока. Он читает данные из стандартного ввода и переводит их в верхний регистр с помощью функции strtoupper. Если входные данные содержат не только буквы и цифры, выводится сообщение об ошибке в стандартный поток ошибок.

Листинг 21.2. Чтение и запись в стандартные потоки


#!/usr/local/bin/php
<?php
while (!feof(STDIN)) {
    $line++;
    $data = trim(fgets(STDIN));

    fputs (STDOUT, strtoupper($data) . “\n”);
    if (!ereg(“^[[:alnum:]]+$”, $data)) {
        fputs(STDERR, “Ошибка: неправильный номер строки $line\n”);
    }
}
?>

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

Передавать содержимое файла myfile в сценарий myscript и перенаправить вывод в outfile можно с помощью следующей команды:

$ myscript < myfile > outfile

Сценарий из листинга 21.2 переводит все данные файла outfile в верхний регистр. Все сообщения об ошибках выводятся на экран, если не перенаправить стандартный поток ошибок.

Все константы и идентификаторы потока, доступные в командной строке PHP, показаны в табл. 21.1.

Таблица 21.1. Доступ к потокам для PHP CLI

Константа Идентификатор Поток
STDIN php://stdin Стандартный ввода
STDOUT php://stdout Стандартный вывода
STDERR php://stderr Стандартный ошибок

Создание настольных приложений

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

Расширение PHP-GTK реализует интерфейс к оконному набору инструментов GIMP, GTK+. Это позволяет разработчикам PHP создавать полноценные приложения с графическим интерфейсом, которые используют окна, меню, кнопки и поддержку мыши.

Резюме

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


<<назад

Погода в Рудне
(Волгоградcкая обл.)

Подробнее >>


Курс валют
на 19 Апр 2024 г.
704 - Вьетнамских донгов
- 1