mirror of
https://github.com/php/doc-ru.git
synced 2026-03-24 07:42:22 +01:00
2015 lines
82 KiB
XML
2015 lines
82 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 96b10a98853e3b8236504e5775f95eb4a15c82c3 Maintainer: rjhdby Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<chapter xml:id="features.commandline" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>Работа с PHP из командной строки</title>
|
||
<titleabbrev>Работа с PHP из командной строки</titleabbrev>
|
||
|
||
<!--Introduction: {{{-->
|
||
<section xml:id="features.commandline.introduction" annotations="chunk:false">
|
||
<title>Введение</title>
|
||
|
||
<para>
|
||
Основная цель &cli.sapi; — разработка консольных приложений на PHP.
|
||
&cli.sapi; содержит много отличий от других видов <acronym>SAPI</acronym>, которые
|
||
объясняет эта глава.
|
||
Обратите внимание, что &cli.sapi; и <acronym>CGI</acronym> —
|
||
разные <acronym>SAPI</acronym>-интерфейсы, хотя в их поведении много общего.
|
||
</para>
|
||
|
||
<para>
|
||
&cli.sapi; включается по умолчанию опцией
|
||
<option role="configure">--enable-cli</option>, а отключается
|
||
опцией <option role="configure">--disable-cli</option> при запуске
|
||
команды <command>./configure</command>.
|
||
</para>
|
||
|
||
<para>
|
||
Имя, расположение и доступность бинарных модулей
|
||
&cli; или <acronym>CGI</acronym>-интерфейса различаются в зависимости
|
||
от способа установки PHP в систему. По умолчанию при выполнении
|
||
команды <command>make</command> внутри директории с исходным кодом PHP
|
||
в каталоге <filename>sapi/cgi/php-cgi</filename> создаётся модуль <acronym>CGI</acronym>,
|
||
а в каталоге <filename>sapi/cli/php</filename> модуль &cli;.
|
||
Обратите внимание, что оба файла модулей называются одинаково:
|
||
<filename>php</filename>.
|
||
Что произойдёт при выполнении <command>make install</command>,
|
||
зависит от того, какие опции указали на стадии
|
||
конфигурирования. Команда <command>make install</command> скопирует
|
||
в каталог <filename>{PREFIX}/bin/php</filename> &cli;-модуль,
|
||
если во время конфигурирования выбрали модуль <acronym>SAPI</acronym>
|
||
наподобие apxs или указали опцию <option role="configure">--disable-cgi</option>,
|
||
иначе команда скопирует в эту директорию <acronym>CGI</acronym>-модуль.
|
||
Например, с опцией <option role="configure">--with-apxs</option>
|
||
команда <command>make install</command> скопирует в каталог
|
||
<filename>{PREFIX}/bin/php</filename> &cli;-версию.
|
||
После команды <command>make install</command> запускают
|
||
команду <command>make install-cli</command>, когда требуется переопределить
|
||
установку двоичного файла <acronym>CGI</acronym>-модуля, или как альтернативу указывают
|
||
в строке конфигурации опцию <option role="configure">--disable-cgi</option>.
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
Опция <option role="configure">--enable-cli</option> в строке
|
||
конфигурации не означает, что команда <command>make install</command>
|
||
скопирует &cli; в каталог <filename>{PREFIX}/bin/php</filename>,
|
||
поскольку опции <option role="configure">--enable-cli</option>
|
||
и <option role="configure">--enable-cgi</option> включены
|
||
по умолчанию.
|
||
</para>
|
||
</note>
|
||
|
||
<para>
|
||
Бинарный файл &cli; лежит в главном каталоге PHP-дистрибутива для Windows
|
||
в виде файла <filename>php.exe</filename>, а <acronym>CGI</acronym>-версия —
|
||
в виде файла <filename>php-cgi.exe</filename>.
|
||
Кроме того, в дистрибутив входит файл <filename>php-win.exe</filename>,
|
||
если PHP сконфигурировали с опцией <option role="configure">--enable-cli-win32</option>.
|
||
Этот файл эквивалентен &cli;-версии, за исключением того, что ничего не выводит,
|
||
и поэтому при запуске файла не открывает окно Командной строки.
|
||
</para>
|
||
|
||
<note>
|
||
<title>Как узнать версию SAPI-интерфейса</title>
|
||
<para>
|
||
Вызов в командной оболочке команды <command>php -v</command>
|
||
выведет информацию о том, запускается двоичный <filename>php</filename>-файл
|
||
как <acronym>CGI</acronym>- или &cli;-версия SAPI-интерфейса.
|
||
Информацию о SAPI-версии возвращают также функция <function>php_sapi_name</function>
|
||
и константа <constant>PHP_SAPI</constant>.
|
||
</para>
|
||
</note>
|
||
|
||
<note>
|
||
<para>
|
||
В Unix-системах страница руководства к интерфейсу CLI
|
||
доступна при вызове команды <literal>man</literal>
|
||
в командной оболочке: <command>man php</command>.
|
||
</para>
|
||
</note>
|
||
</section>
|
||
<!--}}}-->
|
||
|
||
<!--Differences: {{{-->
|
||
<section xml:id="features.commandline.differences">
|
||
<title>Основные отличия от остальных реализаций <acronym>SAPI</acronym></title>
|
||
|
||
<para>
|
||
Основные отличия &cli;-версии <acronym>SAPI</acronym>-интерфейса от остальных реализаций
|
||
<acronym>SAPI</acronym>:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
В отличие от <acronym>CGI</acronym>-версии <acronym>SAPI</acronym>-интерфейса,
|
||
заголовки не пишутся в поток вывода.
|
||
</para>
|
||
<para>
|
||
Хотя в <acronym>CGI</acronym>-версии <acronym>SAPI</acronym>-интерфейса
|
||
предусмотрели способ подавления HTTP-заголовков, в &cli.sapi; заголовки
|
||
включить нельзя.
|
||
</para>
|
||
<para>
|
||
&cli; по умолчанию запускается в тихом режиме, тем не менее,
|
||
ключи <option>-q</option> и <option>--no-header</option>
|
||
сохранили для обратной совместимости, что разрешает
|
||
запускать старые <acronym>CGI</acronym>-скрипты.
|
||
</para>
|
||
<para>
|
||
Текущая директория не изменяется на рабочую директорию скрипта.
|
||
Ключи <option>-C</option> и <option>--no-chdir</option>
|
||
сохранили для обратной совместимости.
|
||
</para>
|
||
<para>
|
||
Сообщения об ошибках выдаются в текстовом режиме —
|
||
без <acronym>HTML</acronym>-форматирования.
|
||
</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>
|
||
Отдельные настройки файла &php.ini; переопределяются &cli.sapi;,
|
||
поскольку в них нет смысла при работе в командной строке:
|
||
</para>
|
||
<para>
|
||
<table>
|
||
<title>Переопределяемые директивы &php.ini;</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Директива</entry>
|
||
<entry>Значение по умолчанию в &cli;-версии <acronym>SAPI</acronym>-интерфейса</entry>
|
||
<entry>Комментарий</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><link linkend="ini.html-errors">html_errors</link></entry>
|
||
<entry>&false;</entry>
|
||
<entry>
|
||
Значение по умолчанию равно &false;, поскольку в консоли неудобно читать
|
||
сообщения об ошибке с нагромождением неинтерпретируемых <acronym>HTML</acronym>-тегов.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link linkend="ini.implicit-flush">implicit_flush</link></entry>
|
||
<entry>&true;</entry>
|
||
<entry>
|
||
В консоли часто требуется, чтобы вывод
|
||
функции <function>print</function>
|
||
или языковой конструкции <function>echo</function>
|
||
сбрасывался сразу, а не хранился в буфере. При этом
|
||
<link linkend="ref.outcontrol">буферизация вывода</link> по-прежнему поддерживается
|
||
для отложенного вывода или манипуляций с данными буфера.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link linkend="ini.max-execution-time">max_execution_time</link></entry>
|
||
<entry>0 (без ограничений)</entry>
|
||
<entry>
|
||
В консольном режиме средствами PHP часто выполняют расширенный,
|
||
по сравнению со стандартными веб-скриптами, диапазон задач,
|
||
и поскольку консольные скрипты часто выполняются долго,
|
||
для директивы устанавливается значение 0 — бесконечное время выполнения скрипта.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link linkend="ini.register-argc-argv">register_argc_argv</link></entry>
|
||
<entry>&true;</entry>
|
||
<entry>
|
||
<para>
|
||
При установке значения &true; скрипты,
|
||
которые выполняются через &cli; <acronym>SAPI</acronym>,
|
||
получают доступ к переменной <emphasis>argc</emphasis>, которая содержит количество переданных приложению аргументов,
|
||
и к переменной <emphasis>argv</emphasis> с массивом текущих аргументов.
|
||
</para>
|
||
<para>
|
||
При работе в &cli; <acronym>SAPI</acronym>
|
||
переменные <varname>$argc</varname> и <varname>$argv</varname>
|
||
автоматически заполняются значениями.
|
||
Эти значения также доступны в массиве <varname>$_SERVER</varname>,
|
||
например: <varname>$_SERVER['argv']</varname>.
|
||
</para>
|
||
<warning>
|
||
<para>
|
||
Переменные <varname>$argv</varname> и <varname>$_SERVER['argv']</varname>
|
||
не относятся к надёжному признаку запуска скрипта
|
||
из командной строки, поскольку при включённой директиве <link linkend="ini.register-argc-argv">register_argc_argv</link>
|
||
переменные могли установить в других контекстах.
|
||
Вместо этого проверяют значение, которое вернула
|
||
функция <function>php_sapi_name</function>.
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
if (php_sapi_name() === 'cli') {
|
||
echo "Код запускается из командной строки!\n";
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
</warning>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link linkend="ini.output-buffering">output_buffering</link></entry>
|
||
<entry>&false;</entry>
|
||
<entry>
|
||
<para>
|
||
Хотя для этой опции файла &php.ini; жёстко установили значение &false;,
|
||
функции <link linkend="book.outcontrol">буферизации вывода</link> по-прежнему
|
||
доступны.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link linkend="ini.max-input-time">max_input_time</link></entry>
|
||
<entry>&false;</entry>
|
||
<entry>
|
||
<para>
|
||
PHP &cli; не поддерживает GET, POST или загрузку файлов.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</para>
|
||
<note>
|
||
<para>
|
||
Эти директивы нельзя инициализировать другими значениями
|
||
из конфигурационного файла &php.ini; или любого другого, если другой файл указали.
|
||
Это ограничение связано с тем, что значения применяются
|
||
после обработки конфигурационных файлов. Тем не менее, эти значения
|
||
могут быть изменены во время работы скрипта (хотя это не имеет особого смысла
|
||
для всех них, например <link linkend="ini.register-argc-argv">register_argc_argv</link>).
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Рекомендуется установить опцию
|
||
<link linkend="ini.ignore-user-abort">ignore_user_abort</link>
|
||
для скриптов, используемых из командной строки. За подробностями
|
||
обращайтесь к функции <function>ignore_user_abort</function>.
|
||
</para>
|
||
</note>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>
|
||
Для облегчения работы в окружении оболочки определили
|
||
несколько констант
|
||
для <link linkend="features.commandline.io-streams">потоков ввода-вывода</link>.
|
||
</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>
|
||
&cli.sapi; <emphasis role="strong">не</emphasis>
|
||
изменяет текущую директорию на директорию исполняемого скрипта.
|
||
</para>
|
||
<example>
|
||
<title>
|
||
Пример, который показывает разницу с <acronym>CGI</acronym>-режимом <acronym>SAPI</acronym>-интерфейса:
|
||
</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
// Базовый тестовый скрипт с названием test.php
|
||
echo getcwd(), "\n";
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
При работе в <acronym>CGI</acronym>-режиме результат работы будет таким:
|
||
</para>
|
||
<screen>
|
||
<![CDATA[
|
||
$ pwd
|
||
/tmp
|
||
|
||
$ php -q another_directory/test.php
|
||
/tmp/another_directory
|
||
]]>
|
||
</screen>
|
||
<para>
|
||
Это наглядно демонстрирует, что PHP изменяет
|
||
текущую директорию на директорию исполняемого скрипта.
|
||
</para>
|
||
<para>
|
||
Работа через &cli.sapi; даёт другой результат:
|
||
</para>
|
||
<screen>
|
||
<![CDATA[
|
||
$ pwd
|
||
/tmp
|
||
|
||
$ php -f another_directory/test.php
|
||
/tmp
|
||
]]>
|
||
</screen>
|
||
<para>
|
||
Это обеспечивает большую гибкость при написании консольных скриптов на PHP.
|
||
</para>
|
||
</example>
|
||
<note>
|
||
<para>
|
||
При запуске из командной строки с ключом <option>-C</option>
|
||
<acronym>CGI</acronym>-режим <acronym>SAPI</acronym>-интерфейса разрешает
|
||
получить поведение, которое аналогично поведению при работе через &cli.sapi;.
|
||
</para>
|
||
</note>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
</section>
|
||
<!--}}}-->
|
||
|
||
<!--Options: {{{-->
|
||
<section xml:id="features.commandline.options">
|
||
<title>Список опций командной строки</title>
|
||
<titleabbrev>Опции</titleabbrev>
|
||
|
||
<para>
|
||
Список опций командной строки, которые предоставляет PHP,
|
||
доступны для получения в любой момент при запуске PHP с ключом <option>-h</option>:
|
||
<screen>
|
||
<![CDATA[
|
||
Usage: php [options] [-f] <file> [--] [args...]
|
||
php [options] -r <code> [--] [args...]
|
||
php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
|
||
php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
|
||
php [options] -- [args...]
|
||
php [options] -a
|
||
|
||
-a Run interactively
|
||
-c <path>|<file> Look for php.ini file in this directory
|
||
-n No php.ini file will be used
|
||
-d foo[=bar] Define INI entry foo with value 'bar'
|
||
-e Generate extended information for debugger/profiler
|
||
-f <file> Parse and execute <file>.
|
||
-h This help
|
||
-i PHP information
|
||
-l Syntax check only (lint)
|
||
-m Show compiled in modules
|
||
-r <code> Run PHP <code> without using script tags <?..?>
|
||
-B <begin_code> Run PHP <begin_code> before processing input lines
|
||
-R <code> Run PHP <code> for every input line
|
||
-F <file> Parse and execute <file> for every input line
|
||
-E <end_code> Run PHP <end_code> after processing all input lines
|
||
-H Hide any passed arguments from external tools.
|
||
-S <addr>:<port> Run with built-in web server.
|
||
-t <docroot> Specify document root <docroot> for built-in web server.
|
||
-s Output HTML syntax highlighted source.
|
||
-v Version number
|
||
-w Output source with stripped comments and whitespace.
|
||
-z <file> Load Zend extension <file>.
|
||
|
||
args... Arguments passed to script. Use -- args when first argument
|
||
starts with - or script is read from stdin
|
||
|
||
--ini Show configuration file names
|
||
|
||
--rf <name> Show information about function <name>.
|
||
--rc <name> Show information about class <name>.
|
||
--re <name> Show information about extension <name>.
|
||
--rz <name> Show information about Zend extension <name>.
|
||
--ri <name> Show configuration for extension <name>.
|
||
]]>
|
||
</screen>
|
||
</para>
|
||
|
||
<para>
|
||
<table>
|
||
<title>Опции, которые доступны из командной строки</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Опция</entry>
|
||
<entry>Полное название</entry>
|
||
<entry>Описание</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>-a</entry>
|
||
<entry>--interactive</entry>
|
||
<entry>
|
||
<para>
|
||
Запустить PHP в интерактивном режиме. Дополнительную информацию
|
||
даёт раздел «<link linkend="features.commandline.interactive">Интерактивная консоль</link>».
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-b</entry>
|
||
<entry>--bindpath</entry>
|
||
<entry>
|
||
<para>
|
||
Путь связывания библиотек (Bind Path) для внешнего режима FASTCGI Server
|
||
(параметр работает только в <acronym>CGI</acronym>-версии).
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-C</entry>
|
||
<entry>--no-chdir</entry>
|
||
<entry>
|
||
<para>
|
||
Не менять текущую директорию на директорию скрипта
|
||
(параметр работает только в <acronym>CGI</acronym>-версии).
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-q</entry>
|
||
<entry>--no-header</entry>
|
||
<entry>
|
||
<para>
|
||
Тихий режим. Подавляет вывод заголовков <acronym>HTTP</acronym>
|
||
(параметр работает только в <acronym>CGI</acronym>-версии).
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-T</entry>
|
||
<entry>--timing</entry>
|
||
<entry>
|
||
<para>
|
||
Измерить время выполнения скрипта, повторенного <varname>count</varname>
|
||
раз (параметр работает только в <acronym>CGI</acronym>-версии).
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-c</entry>
|
||
<entry>--php-ini</entry>
|
||
<entry>
|
||
<para>
|
||
Указывает, либо директорию, в которой требуется искать
|
||
конфигурационный файл &php.ini;, либо пользовательский
|
||
<literal>INI</literal>-файл (название которого может
|
||
отличаться от стандартного &php.ini;), например:
|
||
</para>
|
||
<para><informalexample>
|
||
<screen>
|
||
<![CDATA[
|
||
$ php -c /custom/directory/ my_script.php
|
||
|
||
$ php -c /custom/directory/custom-file.ini my_script.php
|
||
]]>
|
||
</screen>
|
||
</informalexample></para>
|
||
<para>
|
||
Если эта опция не указана, поиск &php.ini; будет осуществлён
|
||
в <link linkend="configuration.file">местах по умолчанию</link>.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-n</entry>
|
||
<entry>--no-php-ini</entry>
|
||
<entry>
|
||
<para>
|
||
Полностью игнорировать &php.ini;.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-d</entry>
|
||
<entry>--define</entry>
|
||
<entry>
|
||
<para>
|
||
Устанавливает пользовательское значение для каждой из
|
||
конфигурационных опций, доступных в &php.ini;. Синтаксис выглядит следующим образом:
|
||
<screen>
|
||
<![CDATA[
|
||
-d configuration_directive[=value]
|
||
]]>
|
||
</screen>
|
||
</para>
|
||
<para><example>
|
||
<title>Пример команды с параметром <literal>-d</literal> для установки INI-настройки</title>
|
||
<screen>
|
||
<![CDATA[
|
||
# Если значение опустили, соответствующей опции присвоится значение "1"
|
||
$ php -d max_execution_time
|
||
-r '$foo = ini_get("max_execution_time"); var_dump($foo);'
|
||
string(1) "1"
|
||
|
||
# Указание пустого значения установит соответствующую опцию значением ""
|
||
php -d max_execution_time=
|
||
-r '$foo = ini_get("max_execution_time"); var_dump($foo);'
|
||
string(0) ""
|
||
|
||
# Конфигурационная переменная будет установлена любым значением, указанным после символа '='
|
||
$ php -d max_execution_time=20
|
||
-r '$foo = ini_get("max_execution_time"); var_dump($foo);'
|
||
string(2) "20"
|
||
$ php
|
||
-d max_execution_time=doesntmakesense
|
||
-r '$foo = ini_get("max_execution_time"); var_dump($foo);'
|
||
string(15) "doesntmakesense"
|
||
]]>
|
||
</screen>
|
||
</example></para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-e</entry>
|
||
<entry>--profile-info</entry>
|
||
<entry>
|
||
<para>
|
||
Включить режим расширенной информации
|
||
для отладчика или профайлера.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-f</entry>
|
||
<entry>--file</entry>
|
||
<entry>
|
||
<para>
|
||
Разбирает и исполняет файл, который указали в параметре <option>-f</option>.
|
||
Параметр необязателен — достаточно
|
||
указать только название файла для запуска.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-h и -?</entry>
|
||
<entry>--help и --usage</entry>
|
||
<entry>
|
||
Выводит список опций командной строки с однострочным описанием того, что они делают.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-i</entry>
|
||
<entry>--info</entry>
|
||
<entry>
|
||
Вызывает функцию <function>phpinfo</function> и выводит результат работы функции.
|
||
При некорректной работе PHP рекомендуют выполнить команду <command>php -i</command>
|
||
и посмотреть, выводятся ли сообщения об ошибках до или вместо информационных таблиц.
|
||
При работе <acronym>CGI</acronym>-модуля учитывают, что команда выведет данные
|
||
в <acronym>HTML</acronym>-формате и поэтому вывод будет большим.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-l</entry>
|
||
<entry>--syntax-check</entry>
|
||
<entry>
|
||
<para>
|
||
Проверяет синтаксис, но не выполняет PHP-код.
|
||
Обработаются входные данные стандартного входного потока, если название файла не указали,
|
||
иначе проверится каждое название файла.
|
||
При выполнении без ошибок в стандартный поток вывода записывается текст
|
||
<literal>No syntax errors detected in <filename></literal>.
|
||
Вместе с внутренней информацией об ошибке парсера
|
||
в станадртный поток вывода записывается текст
|
||
<literal>Errors parsing <filename></literal>,
|
||
если возникла ошибка.
|
||
Опция присвоит коду возврата командной оболочки значение <literal>-1</literal>,
|
||
если в заданных файлах или данных стандартного потока ввода возникли ошибки,
|
||
иначе опция присвоит коду возврата командной оболочки значение <literal>0</literal>.
|
||
</para>
|
||
<para>
|
||
Опция не обнаружит фатальные ошибки в коде, который требует выполнения,
|
||
наподобие вызова функций, которые не объявили.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
До PHP 8.3.0 для проверки разрешалось указывать только одно название файла.
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Опция не работает с опцией <option>-r</option>.
|
||
</para>
|
||
</note>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-m</entry>
|
||
<entry>--modules</entry>
|
||
<entry>
|
||
<para><example>
|
||
<title>Вывод списка PHP- и Zend-модулей ядра, которые загрузили</title>
|
||
<screen>
|
||
<![CDATA[
|
||
$ php -m
|
||
[PHP Modules]
|
||
xml
|
||
tokenizer
|
||
standard
|
||
session
|
||
posix
|
||
pcre
|
||
overload
|
||
mysql
|
||
mbstring
|
||
ctype
|
||
|
||
[Zend Modules]
|
||
]]>
|
||
</screen>
|
||
</example></para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-r</entry>
|
||
<entry>--run</entry>
|
||
<entry>
|
||
<para>
|
||
Разрешает выполнять PHP-код, который указали
|
||
в командной строке. Открывающие и закрывающие
|
||
PHP-теги (<literal><?php</literal> и <literal>?></literal>)
|
||
<emphasis role="strong">не нужны</emphasis>
|
||
и вызовут синтаксическую ошибку.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
С этим ключом работают очень осторожно и избегают
|
||
недоразумений, которые связаны с автоматической подстановкой переменных окружения.
|
||
</para>
|
||
<example>
|
||
<title>Ошибка синтаксиса при двойных кавычках</title>
|
||
<screen>
|
||
<![CDATA[
|
||
$ php -r "$foo = get_defined_constants();"
|
||
PHP Parse error: syntax error, unexpected '=' in Command line code on line 1
|
||
|
||
Parse error: syntax error, unexpected '=' in Command line code on line 1
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
<para>
|
||
Проблема здесь заключается в том, что командная оболочка bash выполняет автоматическую
|
||
подстановку переменных в sh-командах, если указали двойные кавычки
|
||
<literal>"</literal>. Поскольку маловероятно, что переменную <varname>$foo</varname>
|
||
определили, переменная заменяется пустой строкой, что изменяет
|
||
PHP-код, который передали для выполнения, вот так:
|
||
</para>
|
||
<informalexample>
|
||
<screen>
|
||
<![CDATA[
|
||
$ php -r " = get_defined_constants();"
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
|
||
<para>
|
||
Правильное решение в таких ситуациях состоит в указании
|
||
одинарных кавычек <literal>'</literal>, поскольку автоматическая подстановка
|
||
переменных, которые обернули в одинарные кавычки, в sh-командах оболочки bash не происходит.
|
||
</para>
|
||
<example>
|
||
<title>Одинарные кавычки, которые предотвращают
|
||
подстановку переменных в консоли</title>
|
||
<screen>
|
||
<![CDATA[
|
||
$ php -r '$foo = get_defined_constants(); var_dump($foo);'
|
||
array(370) {
|
||
["E_ERROR"]=>
|
||
int(1)
|
||
["E_WARNING"]=>
|
||
int(2)
|
||
["E_PARSE"]=>
|
||
int(4)
|
||
["E_NOTICE"]=>
|
||
int(8)
|
||
["E_CORE_ERROR"]=>
|
||
[...]
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
<para>
|
||
В оболочках, которые отличаются от оболочки bash и которые запускают sh-команды,
|
||
иногда возникают другие проблемы. Тогда требуется создать отчёт о ошибке, которая возникла, на сайте
|
||
<link xlink:href="&url.php.bugs;">&url.php.bugs;</link>.
|
||
С проблемами иногда сталкиваются при попытке получить доступ
|
||
к переменным оболочки или при работе с экранирующими обратными слешами.
|
||
Теперь вы предупреждены!
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Ключ <option>-r</option> доступен в &cli.sapi;, но недоступен
|
||
в <emphasis>CGI</emphasis> <acronym>SAPI</acronym>.
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Опция предназначена только для самого простого кода.
|
||
Поэтому некоторые конфигурационные директивы наподобие
|
||
<link linkend="ini.auto-prepend-file">auto_prepend_file</link>
|
||
и <link linkend="ini.auto-append-file">auto_append_file</link>
|
||
в этом режиме проигнорируются.
|
||
</para>
|
||
</note>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-B</entry>
|
||
<entry>--process-begin</entry>
|
||
<entry>
|
||
<para>
|
||
PHP-код, который требуется выполнить перед обработкой стандартного потока ввода stdin.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-R</entry>
|
||
<entry>--process-code</entry>
|
||
<entry>
|
||
<para>
|
||
PHP-код, который требуется выполнить для каждой строки ввода.
|
||
</para>
|
||
<para>
|
||
В этом режиме предусмотрели две специальные переменные:
|
||
<varname>$argn</varname> и <varname>$argi</varname>.
|
||
Переменная <varname>$argn</varname> содержит строку, которую PHP
|
||
обрабатывает в текущий момент, а переменная <varname>$argi</varname>
|
||
содержит номер этой строки.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-F</entry>
|
||
<entry>--process-file</entry>
|
||
<entry>
|
||
<para>
|
||
PHP-файл, который требуется выполнить для каждой строки ввода.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-E</entry>
|
||
<entry>--process-end</entry>
|
||
<entry>
|
||
<para>
|
||
PHP-код, который требуется выполнить после обработки ввода.
|
||
</para>
|
||
<para><example>
|
||
<title>
|
||
Подсчёт количества строк в проекте
|
||
опциями <option>-B</option>, <option>-R</option> и <option>-E</option>
|
||
</title>
|
||
<screen>
|
||
<![CDATA[
|
||
$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Всего строк: $l\n";'
|
||
Всего строк: 37328
|
||
]]>
|
||
</screen>
|
||
</example></para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-S</entry>
|
||
<entry>--server</entry>
|
||
<entry>
|
||
<para>
|
||
Запускает <link linkend="features.commandline.webserver">встроенный веб-сервер</link>.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-t</entry>
|
||
<entry>--docroot</entry>
|
||
<entry>
|
||
Указывает корень документа
|
||
для <link linkend="features.commandline.webserver">встроенного веб-сервера</link>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-s</entry>
|
||
<entry>--syntax-highlight и --syntax-highlighting</entry>
|
||
<entry>
|
||
<para>
|
||
Показывает исходный код с подсветкой синтаксиса.
|
||
</para>
|
||
<para>
|
||
Эта опция использует внутренний механизм для разбора файла
|
||
и записи в стандартный поток вывода подсвеченной версии
|
||
этого файла. Учтите, что опция только генерирует
|
||
блок <literal><code> [...] </code></literal>
|
||
HTML-тегов, без HTML-заголовков.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
Опция несовместима с опцией <option>-r</option>.
|
||
</para>
|
||
</note>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-v</entry>
|
||
<entry>--version</entry>
|
||
<entry>
|
||
<para><example>
|
||
<title>
|
||
Получение информации о названия <acronym>SAPI</acronym>,
|
||
PHP- и Zend-версии через опцию <option>-v</option>
|
||
</title>
|
||
<screen>
|
||
<![CDATA[
|
||
$ php -v
|
||
PHP 5.3.1 (cli) (built: Dec 11 2009 19:55:07)
|
||
Copyright (c) 1997-2009 The PHP Group
|
||
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
|
||
]]>
|
||
</screen>
|
||
</example></para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-w</entry>
|
||
<entry>--strip</entry>
|
||
<entry>
|
||
<para>
|
||
Показывает исходный код без комментариев и пробелов.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
Опция несовместима с опцией <option>-r</option>.
|
||
</para>
|
||
</note>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>-z</entry>
|
||
<entry>--zend-extension</entry>
|
||
<entry>
|
||
<para>
|
||
Загружает модуль Zend. PHP попытается загрузить модуль из текущего пути библиотеки
|
||
по умолчанию в системе, который в Linux-системах обычно указывают
|
||
в файле <filename>/etc/ld.so.conf</filename>, если передали только название файла.
|
||
Передача файла с абсолютным путём не будет использовать
|
||
системный путь поиска библиотеки. Относительное имя файла, которое содержит
|
||
директорию, заставит PHP загрузить модуль относительно
|
||
текущей директории.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry></entry>
|
||
<entry>--ini</entry>
|
||
<entry>
|
||
<para>
|
||
Показывает имена файлов конфигурации и просканированные каталоги.
|
||
<example>
|
||
<title>Пример <literal>--ini</literal></title>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php --ini
|
||
Configuration File (php.ini) Path: /usr/dev/php/5.2/lib
|
||
Loaded Configuration File: /usr/dev/php/5.2/lib/php.ini
|
||
Scan for additional .ini files in: (none)
|
||
Additional .ini files parsed: (none)
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>--rf</entry>
|
||
<entry>--rfunction</entry>
|
||
<entry>
|
||
<para>
|
||
Показывает информацию о функции или методе
|
||
класса (например, количество и названия параметров).
|
||
</para>
|
||
<para>
|
||
Опция доступна, только если PHP скомпилировали
|
||
с поддержкой интерфейса <link linkend="book.reflection">Reflection</link>.
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>Пример базового поведения опции <literal>--rf</literal></title>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php --rf var_dump
|
||
Function [ <internal> public function var_dump ] {
|
||
|
||
- Parameters [2] {
|
||
Parameter #0 [ <required> $var ]
|
||
Parameter #1 [ <optional> $... ]
|
||
}
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>--rc</entry>
|
||
<entry>--rclass</entry>
|
||
<entry>
|
||
<para>
|
||
Показывает информацию об классе; выводит
|
||
список констант, свойств и методов.
|
||
</para>
|
||
<para>
|
||
Опция доступна, только если PHP скомпилировали
|
||
с поддержкой интерфейса <link linkend="book.reflection">Reflection</link>.
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>Пример вывода опции <literal>--rc</literal></title>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php --rc Directory
|
||
Class [ <internal:standard> class Directory ] {
|
||
|
||
- Constants [0] {
|
||
}
|
||
|
||
- Static properties [0] {
|
||
}
|
||
|
||
- Static methods [0] {
|
||
}
|
||
|
||
- Properties [0] {
|
||
}
|
||
|
||
- Methods [3] {
|
||
Method [ <internal> public method close ] {
|
||
}
|
||
|
||
Method [ <internal> public method rewind ] {
|
||
}
|
||
|
||
Method [ <internal> public method read ] {
|
||
}
|
||
}
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>--re</entry>
|
||
<entry>--rextension</entry>
|
||
<entry>
|
||
<para>
|
||
Показывает информацию о модуле; выводит
|
||
список опций файла &php.ini;, функций, которые объявили, констант
|
||
и классов.
|
||
</para>
|
||
<para>
|
||
Опция доступна, только если PHP скомпилировали
|
||
с поддержкой интерфейса <link linkend="book.reflection">Reflection</link>.
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>Пример вывода опции <literal>--re</literal></title>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php --re json
|
||
Extension [ <persistent> extension #19 json version 1.2.1 ] {
|
||
|
||
- Functions {
|
||
Function [ <internal> function json_encode ] {
|
||
}
|
||
Function [ <internal> function json_decode ] {
|
||
}
|
||
}
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>--rz</entry>
|
||
<entry>--rzendextension</entry>
|
||
<entry>
|
||
<para>
|
||
Показывает информацию о конфигурации Zend-модуля —
|
||
та же информация, которая возвращается функцией <function>phpinfo</function>.
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>--ri</entry>
|
||
<entry>--rextinfo</entry>
|
||
<entry>
|
||
<para>
|
||
Показывает информацию о конфигурации указанного модуля
|
||
(та же информация, которая возвращается <function>phpinfo</function>).
|
||
Конфигурацию ядра можно узнать, указав в качестве имени
|
||
модуля значение "main".
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>Пример <literal>--ri</literal></title>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php --ri date
|
||
|
||
date
|
||
|
||
date/time support => enabled
|
||
"Olson" Timezone Database Version => 2009.20
|
||
Timezone Database => internal
|
||
Default timezone => Europe/Oslo
|
||
|
||
Directive => Local Value => Master Value
|
||
date.timezone => Europe/Oslo => Europe/Oslo
|
||
date.default_latitude => 59.930972 => 59.930972
|
||
date.default_longitude => 10.776699 => 10.776699
|
||
date.sunset_zenith => 90.583333 => 90.583333
|
||
date.sunrise_zenith => 90.583333 => 90.583333
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
Опции <literal>-rBRFEH</literal>, <literal>--ini</literal> и
|
||
<literal>--r[fcezi]</literal> доступны только в &cli;.
|
||
</para>
|
||
</note>
|
||
</section>
|
||
<!--}}}-->
|
||
|
||
<!--Usage: {{{-->
|
||
<section xml:id="features.commandline.usage">
|
||
<title>Выполнение PHP-файлов</title>
|
||
<titleabbrev>Использование</titleabbrev>
|
||
|
||
<para>
|
||
В &cli.sapi; есть три различных способа запуска PHP-кода:
|
||
<orderedlist>
|
||
<listitem>
|
||
<para>
|
||
Указание конкретного файла для запуска.
|
||
</para>
|
||
<informalexample>
|
||
<screen>
|
||
<![CDATA[
|
||
$ php my_script.php
|
||
|
||
$ php -f my_script.php
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
<para>
|
||
Оба способа — с опцией <option>-f</option> или без — запустят
|
||
файл <filename>my_script.php</filename>. Нет ограничений, какой
|
||
файл запускать; в частности, файлам даже не требуется
|
||
содержать расширение <literal>.php</literal>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Передача PHP-кода для выполнения в командной строке.
|
||
</para>
|
||
<informalexample>
|
||
<screen>
|
||
<![CDATA[
|
||
$ php -r 'print_r(get_defined_constants());'
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
<para>
|
||
При работе в этом режиме соблюдают осторожность
|
||
из-за риска подстановки значений переменных оболочки в переменные в двойных кавычках.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
Внимательно прочтите пример: код не содержит открывающих и закрывающих тегов!
|
||
Опции <option>-r</option> теги не требуются, и даже
|
||
вызовут ошибку разбора.
|
||
</para>
|
||
</note>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Передать запускаемый PHP-код через стандартный поток ввода
|
||
(<literal>stdin</literal>).
|
||
</para>
|
||
<para>
|
||
Это даёт мощную возможность создавать PHP-код и
|
||
передавать его запускаемому файлу, как показано в этом
|
||
(вымышленном) примере:
|
||
</para>
|
||
<informalexample>
|
||
<screen>
|
||
<![CDATA[
|
||
$ some_application | some_filter | php | sort -u > final_output.txt
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
</listitem>
|
||
</orderedlist>
|
||
Вы не можете комбинировать любой из этих трёх способов запуска кода.
|
||
</para>
|
||
|
||
<para>
|
||
Как и любое другое консольное приложение бинарный файл PHP
|
||
принимает аргументы, но PHP-скрипт также получает
|
||
аргументы. PHP не ограничивает количество аргументов,
|
||
передаваемых в скрипт (оболочка консоли устанавливает
|
||
некоторый порог количества символов, которые могут передать;
|
||
обычно этого лимита хватает). Переданные аргументы доступны
|
||
в глобальном массиве <varname>$argv</varname>. Первый индекс —
|
||
ноль — содержит название скрипта, который вызвали из командной строки.
|
||
Учтите, что если код вызывается из командной
|
||
строки на лету с опцией <option>-r</option>, значением
|
||
элемента <varname>$argv[0]</varname> будет <literal>«Стандартный поток»</literal> (Standard input code);
|
||
до PHP 7.2.0 это был дефис (<literal>"-"</literal>). То же самое верно и для кода,
|
||
переданного через конвейер из <constant>STDIN</constant>.
|
||
</para>
|
||
|
||
<para>
|
||
Вторая зарегистрированная глобальная переменная —
|
||
<varname>$argc</varname>, которая содержит количество элементов
|
||
в массиве <varname>$argv</varname>,
|
||
а <emphasis role="strong">не</emphasis> количество аргументов,
|
||
которые передали скрипту.
|
||
</para>
|
||
|
||
<para>
|
||
В режиме командной строки PHP поддерживает передачу аргументов скрипту без символа <literal>-</literal>.
|
||
При передаче в скрипт аргумента, перед которым указали символ <literal>-</literal>,
|
||
возникнет ошибка, поскольку PHP-интерпретатор попытается обработать аргумент до выполнения скрипта
|
||
как параметр команды. Аргументы скрипта указывают
|
||
после разделителя списка аргументов <literal>--</literal>, чтобы не возникали ошибки интерпретации команды.
|
||
После разбора разделителя PHP-интерпретатором следующие
|
||
аргументы передаются в скрипт нетронутыми.
|
||
</para>
|
||
|
||
<informalexample>
|
||
<screen>
|
||
<![CDATA[
|
||
# Команда не запустит код, а выведет информацию о параметрах командной строки, которые поддерживает PHP
|
||
$ php -r 'var_dump($argv);' -h
|
||
Usage: php [options] [-f] <file> [args...]
|
||
[...]
|
||
|
||
# Команда передаст аргумент '-h' в скрипт вместо вывода справки по параметрам PHP
|
||
$ php -r 'var_dump($argv);' -- -h
|
||
array(2) {
|
||
[0]=>
|
||
string(1) "-"
|
||
[1]=>
|
||
string(2) "-h"
|
||
}
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
|
||
<para>
|
||
При этом в Unix-системах доступен ещё один способ запуска
|
||
PHP-скриптов из консоли. В первой строке такого скрипта
|
||
указывают шебанг #! (от англ. hashbang) и корректный путь
|
||
к бинарному файлу PHP &cli;: <literal>#!/usr/bin/php</literal>.
|
||
После этой строки записывают стандартный PHP-код,
|
||
обрамлённый открывающим и закрывающим PHP-тегами. Сразу после установки
|
||
корректных атрибутов запуска на файл,
|
||
например <command>chmod +x test</command>), скрипт станет готов
|
||
к запуску как стандартный консольный или perl-скрипт:
|
||
</para>
|
||
|
||
<example>
|
||
<title>Запуск PHP-скрипта как консольного</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
#!/usr/bin/php
|
||
<?php
|
||
var_dump($argv);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
Предполагая, что этот файл назван <filename>test</filename>
|
||
и находится в текущей директории, можно сделать следующее:
|
||
</para>
|
||
<screen>
|
||
<![CDATA[
|
||
$ chmod +x test
|
||
$ ./test -h -- foo
|
||
array(4) {
|
||
[0]=>
|
||
string(6) "./test"
|
||
[1]=>
|
||
string(2) "-h"
|
||
[2]=>
|
||
string(2) "--"
|
||
[3]=>
|
||
string(3) "foo"
|
||
}
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<para>
|
||
Как можно увидеть, в этом случае не нужно заботиться о
|
||
передаче параметров, которые начинаются с <literal>-</literal>.
|
||
</para>
|
||
|
||
<para>
|
||
Исполняемый PHP-файл может использоваться для запуска PHP-скриптов
|
||
независимо от веб-сервера. В случае работы в Unix-подобной системе,
|
||
необходимо добавить в первую строку файла <literal>#!</literal> (называемый также "shebang")
|
||
чтобы указать, какая из программ должна запускать скрипт.
|
||
На Windows-платформах можно назначить обработчик <filename>php.exe</filename> для файлов
|
||
с расширениями <literal>.php</literal> или создать пакетный
|
||
(.bat) файл для запуска скриптов посредством PHP.
|
||
Строка, добавляемая в начале скрипта для Unix-систем,
|
||
не влияет на их работу в ОС Windows, таким образом можно
|
||
создавать кросс-платформенные скрипты. Ниже приведён простой
|
||
пример скрипта, который выполняется из командной строки:
|
||
</para>
|
||
|
||
<para>
|
||
<example>
|
||
<title>Скрипт для запуска из командной строки (script.php)</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
#!/usr/bin/php
|
||
<?php
|
||
|
||
if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
|
||
?>
|
||
|
||
Это консольный PHP-скрипт, принимающий один аргумент.
|
||
|
||
Использование:
|
||
<?php echo $argv[0]; ?> <option>
|
||
|
||
<option> Любое слово, которое вы хотели бы
|
||
напечатать. Опции --help, -help, -h,
|
||
или -? покажут текущую справочную информацию.
|
||
|
||
<?php
|
||
} else {
|
||
echo $argv[1];
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
|
||
<para>
|
||
В приведённом скрипте первая строка содержит шебанг,
|
||
который указывает, что файл запускается PHP. Работа ведётся с &cli;-версией,
|
||
поэтому не будет выведено ни одного <acronym>HTTP</acronym>-заголовка.
|
||
</para>
|
||
|
||
<para>
|
||
Скрипт сначала проверяет наличие обязательного одного аргумента (в дополнение к
|
||
имени скрипта, который также подсчитывается). Если их нет, или если переданный
|
||
аргумент был <option>--help</option>, <option>-help</option>,
|
||
<option>-h</option> или <option>-?</option>, выводится
|
||
справочное сообщение с использованием <varname>$argv[0]</varname>, которое содержит
|
||
имя выполняемого скрипта. В противном случае просто выводится полученный аргумент.
|
||
</para>
|
||
|
||
<para>
|
||
Для запуска приведённого примера в Unix-системе, нужно сделать
|
||
его исполняемым и просто выполнить в консоли
|
||
<command>script.php echothis</command> или
|
||
<command>script.php -h</command>. В Windows-системе можно
|
||
создать пакетный файл:
|
||
</para>
|
||
|
||
<para>
|
||
<example>
|
||
<title>Пакетный файл для запуска PHP-скрипта из командной строки (script.bat)</title>
|
||
<programlisting role="winbat">
|
||
<![CDATA[
|
||
@echo OFF
|
||
"C:\php\php.exe" script.php %*
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
|
||
<para>
|
||
Предполагая, что вышеприведённый скрипт называется
|
||
<filename>script.php</filename>, а полный путь к &cli;
|
||
<filename>php.exe</filename> находится в
|
||
<filename>C:\php\php.exe</filename>, этот пакетный файл
|
||
запустит его с переданными параметрами:
|
||
<command>script.bat echothis</command> или
|
||
<command>script.bat -h</command>.
|
||
</para>
|
||
|
||
<para>
|
||
Также можно ознакомиться с модулем
|
||
<link linkend="ref.readline">Readline</link> для получения
|
||
дополнительных функций, которые можно использовать для улучшения
|
||
консольного PHP-скрипта.
|
||
</para>
|
||
|
||
<para>
|
||
В Windows запуск PHP можно настроить без
|
||
необходимости указывать <filename>C:\php\php.exe</filename> или
|
||
расширение <literal>.php</literal>.
|
||
Подробнее эта тема описана в разделе
|
||
<link linkend="install.windows.commandline">Запуск PHP из
|
||
командной строки в Microsoft Windows</link>.
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
В Windows рекомендуется запускать PHP под актуальной учётной записью пользователя.
|
||
При работе в сетевой службе отдельные операции не выполняются,
|
||
поскольку «сопоставление имён учётных записей и идентификаторов безопасности не выполнено».
|
||
</para>
|
||
</note>
|
||
</section>
|
||
<!--}}}-->
|
||
|
||
<!--I/O Streams: {{{-->
|
||
<section xml:id="features.commandline.io-streams">
|
||
<title>Потоки ввода-вывода</title>
|
||
<titleabbrev>Потоки ввода-вывода</titleabbrev>
|
||
|
||
<para>
|
||
Модуль &cli.sapi; определяет набор констант для потоков
|
||
ввода-вывода, чтобы упростить работу с командной строкой.
|
||
</para>
|
||
|
||
<para>
|
||
<table>
|
||
<title>Константы, специфичные для модуля CLI</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Константа</entry>
|
||
<entry>Описание</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><constant>STDIN</constant></entry>
|
||
<entry>
|
||
<para>Уже открытый поток ввода (<literal>stdin</literal>).
|
||
Это предотвращает необходимость его открывать следующим способом:
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$stdin = fopen('php://stdin', 'r');
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
Если вы хотите прочесть одну строку из <literal>stdin</literal>,
|
||
можно использовать следующий код:
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$line = trim(fgets(STDIN)); // читает одну строку из STDIN
|
||
fscanf(STDIN, "%d\n", $number); // читает число из STDIN
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para></entry>
|
||
</row>
|
||
<row>
|
||
<entry><constant>STDOUT</constant></entry>
|
||
<entry><para>
|
||
Уже открытый поток вывода (<literal>stdout</literal>).
|
||
Это предотвращает необходимость его открывать следующим способом:
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$stdout = fopen('php://stdout', 'w');
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para></entry>
|
||
</row>
|
||
<row>
|
||
<entry><constant>STDERR</constant></entry>
|
||
<entry>
|
||
<para>
|
||
Уже открытый поток ошибок (<literal>stderr</literal>).
|
||
Это предотвращает необходимость его открывать следующим способом:
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$stderr = fopen('php://stderr', 'w');
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</para>
|
||
|
||
<para>
|
||
Учитывая вышесказанное, нет необходимости самому открывать поток,
|
||
например, <literal>stderr</literal>, а можно просто
|
||
использовать уже определённую константу ресурса потока:
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
php -r 'fwrite(STDERR, "stderr\n");'
|
||
]]>
|
||
</programlisting>
|
||
PHP закроет поток автоматически при завершении работы скрипта,
|
||
поэтому закрывать поток вручную не требуется.
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
Эти константы недоступны, если PHP-скрипт считывается
|
||
из потока <literal>stdin</literal>.
|
||
</para>
|
||
</note>
|
||
</section>
|
||
<!--}}}-->
|
||
|
||
<!--Interactive shell: {{{-->
|
||
<section xml:id="features.commandline.interactive">
|
||
<title>Интерактивная консоль</title>
|
||
|
||
<para>
|
||
Модуль &cli.sapi; поддерживает интерактивную консоль, которую запускает
|
||
опция <option>-a</option>, если PHP скомпилировали с параметром
|
||
<option role="configure">--with-readline</option>.
|
||
Начиная с PHP PHP 7.1.0 интерактивная консоль также доступна в ОС Windows,
|
||
если <link linkend="book.readline">модуль readline</link> включили.
|
||
</para>
|
||
|
||
<para>
|
||
Интерактивная консоль умеет принимать и выполнять сам PHP-код.
|
||
</para>
|
||
|
||
<example>
|
||
<title>Запуск кода в интерактивной консоли</title>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php -a
|
||
Interactive shell
|
||
|
||
php > echo 5+8;
|
||
13
|
||
php > function addTwo($n)
|
||
php > {
|
||
php { return $n + 2;
|
||
php { }
|
||
php > var_dump(addtwo(2));
|
||
int(4)
|
||
php >
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<para>
|
||
Интерактивная консоль при нажатии клавиши Tab также автодополняет
|
||
названия функций, констант, классов, переменных, вызовы
|
||
статических методов и константы классов.
|
||
</para>
|
||
|
||
<example>
|
||
<title>Автодополнение по клавише Tab</title>
|
||
<simpara>
|
||
Двойное нажатие клавиши Tab покажет список вариантов,
|
||
если доступно больше одного варианта дополнения:
|
||
</simpara>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
php > strp[TAB][TAB]
|
||
strpbrk strpos strptime
|
||
php > strp
|
||
]]>
|
||
</programlisting>
|
||
<simpara>
|
||
Когда есть только одно дополнение, одиночное нажатие
|
||
Tab дополнит оставшийся текст на той же самой строке:
|
||
</simpara>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
php > strpt[TAB]ime(
|
||
]]>
|
||
</programlisting>
|
||
<simpara>
|
||
Дополнение также работает для имён, которые объявили
|
||
в течение текущей интерактивной сессии:
|
||
</simpara>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
php > $fooThisIsAReallyLongVariableName = 42;
|
||
php > $foo[TAB]ThisIsAReallyLongVariableName
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<simpara>
|
||
Интерактивная оболочка хранит историю команд, для доступа к которой
|
||
нажимают стрелки вверх и вниз.
|
||
История хранится в файле <filename>~/.php_history</filename>.
|
||
Начиная с PHP 8.4.0 установить путь к файлу с историей команд можно
|
||
в переменной окружения <envar>PHP_HISTFILE</envar>.
|
||
</simpara>
|
||
|
||
<para>
|
||
Модуль &cli.sapi; поддерживает две новые настройки в файле &php.ini;:
|
||
<parameter>cli.pager</parameter> и <parameter>cli.prompt</parameter>.
|
||
Директива <parameter>cli.pager</parameter> разрешает использовать
|
||
внешнюю программу наподобие <filename>less</filename>
|
||
для постраничного просмотра, а не прямого вывода данных на экран.
|
||
Настройка <parameter>cli.prompt</parameter> разрешает задавать
|
||
приглашение <literal>php ></literal> на ввод команды.
|
||
</para>
|
||
|
||
<para>
|
||
В интерактивной консоли также разрешается устанавливать настройки
|
||
файла &php.ini; через специальное сокращение.
|
||
</para>
|
||
|
||
<example>
|
||
<title>Установка настройки файла &php.ini; в интерактивной консоли</title>
|
||
<simpara>
|
||
Настройка <parameter>cli.prompt</parameter>:
|
||
</simpara>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
php > #cli.prompt=hello world :>
|
||
hello world :>
|
||
]]>
|
||
</programlisting>
|
||
<simpara>
|
||
Обратными кавычками задают PHP-код, который
|
||
выполнится в приглашении на ввод команды:
|
||
</simpara>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
php > #cli.prompt=`echo date('H:i:s');` php >
|
||
15:49:35 php > echo 'hi';
|
||
hi
|
||
15:49:43 php > sleep(2);
|
||
15:49:45 php >
|
||
]]>
|
||
</programlisting>
|
||
<simpara>
|
||
Установка <filename>less</filename> для постраничного вывода данных:
|
||
</simpara>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
php > #cli.pager=less
|
||
php > phpinfo();
|
||
(output displayed in less)
|
||
php >
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<para>
|
||
Настройка <parameter>cli.prompt</parameter> поддерживает
|
||
несколько управляющих последовательностей:
|
||
<table>
|
||
<title>Управляющие последовательности <parameter>cli.prompt</parameter></title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Управляющая последовательность</entry>
|
||
<entry>Описание</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>\e</literal></entry>
|
||
<entry>
|
||
Используется для добавления цветов в приглашение на ввод команды.
|
||
Пример: <literal>\e[032m\v \e[031m\b \e[34m\> \e[0m</literal>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\v</literal></entry>
|
||
<entry>Версия PHP.</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\b</literal></entry>
|
||
<entry>
|
||
Отображает в какой части PHP мы находимся. Для примера <literal>/*</literal>
|
||
показывает, что мы находимся в многострочном комментарии. Внешняя область
|
||
видимости обозначается как <literal>php</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\></literal></entry>
|
||
<entry>
|
||
Указывает символ приглашения. По умолчанию это символ <literal>></literal>,
|
||
но можно изменить, когда оболочка находится внутри незакрытого блока или строки.
|
||
Возможные символы: <literal>' " { ( ></literal>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
Файлы, подключённые с помощью опций
|
||
<link linkend="ini.auto-prepend-file">auto_prepend_file</link> и
|
||
<link linkend="ini.auto-append-file">auto_append_file</link>
|
||
обрабатываются в этом режиме с некоторыми ограничениями,
|
||
например, функции должны быть объявлены до их использования.
|
||
</para>
|
||
</note>
|
||
|
||
<section xml:id="features.commandline.interactive.mode">
|
||
<title>Интерактивный режим</title>
|
||
<para>
|
||
До PHP 8.1.0 при недоступности модуля readline вызов файла &cli.sapi;
|
||
с параметром <option>-a</option> запускал интерактивный режим.
|
||
В этом режиме предполагается, что PHP-скрипт передадут целиком через стандартный
|
||
входной поток STDIN, затем завершат ввод комбинацией клавиш
|
||
<keycombo action='simul'>
|
||
<keycap>CTRL</keycap>
|
||
<keycap>D</keycap>
|
||
</keycombo>
|
||
(в POSIX-системах) или комбинацией
|
||
<keycombo action='simul'>
|
||
<keycap>CTRL</keycap>
|
||
<keycap>Z</keycap>
|
||
</keycombo>,
|
||
за которой идёт клавиша <literal>ENTER</literal> (в ОС Windows), после чего скрипт обработается.
|
||
По сути это то же самое, что и вызов &cli.sapi; без параметра <option>-a</option>.
|
||
option.
|
||
</para>
|
||
<para>
|
||
Начиная с PHP 8.1.0 при недоступности модуля readline вызов &cli.sapi;
|
||
с параметром <option>-a</option> завершается ошибкой.
|
||
</para>
|
||
</section>
|
||
</section>
|
||
<!--}}}-->
|
||
|
||
<!--Built-in CLI Web Server: {{{-->
|
||
<section xml:id="features.commandline.webserver">
|
||
<title>Встроенный веб-сервер</title>
|
||
|
||
<warning>
|
||
<para>
|
||
Веб-сервер предназначен для помощи в разработке приложений. Он также может
|
||
быть полезным в тестовых целях или для демонстрации приложения, запускаемого
|
||
в полностью контролируемом окружении. Он не выполняет функции полноценного
|
||
веб-сервера и не должен использоваться в общедоступных сетях.
|
||
</para>
|
||
</warning>
|
||
|
||
<para>
|
||
Модуль &cli.sapi; содержит встроенный веб-сервер.
|
||
</para>
|
||
|
||
<para>
|
||
Веб-сервер выполняет только один однопоточный процесс, поэтому приложения PHP
|
||
остановятся при блокировке запроса.
|
||
</para>
|
||
|
||
<para>
|
||
URI-запросы обслуживаются из текущей директории, в которой запустили PHP,
|
||
если не указали опцию -t для переназначения корневого документа.
|
||
При запросе URI, который не указывает на конкретный файл, возвращается
|
||
файл index.php или index.html в заданной директории. При недоступности файлов
|
||
поиск файлов продолжается в родительской директории, и так далее,
|
||
пока веб-сервер не найдёт файл или не достигнет корня документа. При обнаружении
|
||
файла index.html веб-сервер возвращает содержимое файла, а при обнаружении файла index.php — возвращается результат обработки.
|
||
При этом в элемент $_SERVER['PATH_INFO']
|
||
записывается последняя часть URL-адреса, иначе возвращается 404-й код ответа.
|
||
</para>
|
||
|
||
<para>
|
||
Если PHP-файл указывается в командной строке, когда запускается веб-сервер,
|
||
то он рассматривается как скрипт "маршрутизации" (router). Скрипт выполняется
|
||
в самом начале каждого HTTP-запроса. Если этот скрипт возвращает
|
||
&false;, то запрашиваемый ресурс возвращается как есть.
|
||
В противном случае браузеру будет возвращён вывод этого скрипта.
|
||
</para>
|
||
|
||
<para>
|
||
Стандартные MIME-типы возвращаются для файлов со следующими расширениями:
|
||
<simplelist type="inline">
|
||
<member><literal>.3gp</literal></member>
|
||
<member><literal>.apk</literal></member>
|
||
<member><literal>.avi</literal></member>
|
||
<member><literal>.bmp</literal></member>
|
||
<member><literal>.css</literal></member>
|
||
<member><literal>.csv</literal></member>
|
||
<member><literal>.doc</literal></member>
|
||
<member><literal>.docx</literal></member>
|
||
<member><literal>.flac</literal></member>
|
||
<member><literal>.gif</literal></member>
|
||
<member><literal>.gz</literal></member>
|
||
<member><literal>.gzip</literal></member>
|
||
<member><literal>.htm</literal></member>
|
||
<member><literal>.html</literal></member>
|
||
<member><literal>.ics</literal></member>
|
||
<member><literal>.jpe</literal></member>
|
||
<member><literal>.jpeg</literal></member>
|
||
<member><literal>.jpg</literal></member>
|
||
<member><literal>.js</literal></member>
|
||
<member><literal>.kml</literal></member>
|
||
<member><literal>.kmz</literal></member>
|
||
<member><literal>.m4a</literal></member>
|
||
<member><literal>.mov</literal></member>
|
||
<member><literal>.mp3</literal></member>
|
||
<member><literal>.mp4</literal></member>
|
||
<member><literal>.mpeg</literal></member>
|
||
<member><literal>.mpg</literal></member>
|
||
<member><literal>.odp</literal></member>
|
||
<member><literal>.ods</literal></member>
|
||
<member><literal>.odt</literal></member>
|
||
<member><literal>.oga</literal></member>
|
||
<member><literal>.ogg</literal></member>
|
||
<member><literal>.ogv</literal></member>
|
||
<member><literal>.pdf</literal></member>
|
||
<member><literal>.png</literal></member>
|
||
<member><literal>.pps</literal></member>
|
||
<member><literal>.pptx</literal></member>
|
||
<member><literal>.qt</literal></member>
|
||
<member><literal>.svg</literal></member>
|
||
<member><literal>.swf</literal></member>
|
||
<member><literal>.tar</literal></member>
|
||
<member><literal>.text</literal></member>
|
||
<member><literal>.tif</literal></member>
|
||
<member><literal>.txt</literal></member>
|
||
<member><literal>.wav</literal></member>
|
||
<member><literal>.webm</literal></member>
|
||
<member><literal>.wmv</literal></member>
|
||
<member><literal>.xls</literal></member>
|
||
<member><literal>.xlsx</literal></member>
|
||
<member><literal>.xml</literal></member>
|
||
<member><literal>.xsl</literal></member>
|
||
<member><literal>.xsd</literal></member>
|
||
<member><literal>.zip</literal></member>
|
||
</simplelist>
|
||
.
|
||
</para>
|
||
|
||
<simpara>
|
||
Начиная с PHP 7.4.0 встроенный веб-сервер получил поддержку
|
||
многопроцессного режима работы для тестирования кода, который требует нескольких
|
||
одновременных запросов к встроенному веб-серверу.
|
||
Перед запуском сервера для переменной среды <envar>PHP_CLI_SERVER_WORKERS</envar>
|
||
устанавливают количество рабочих процессов, которое требуется для тестирования.
|
||
</simpara>
|
||
<note>
|
||
<simpara>ОС Windows не поддерживает многопроцессный режим.</simpara>
|
||
</note>
|
||
<note>
|
||
<simpara>
|
||
Информацию о параметрах, которые поддерживает PHP в режиме командной строки,
|
||
возвращают команды <command>php --help</command> или <command>man php</command>.
|
||
PHP проигнорирует параметры командной строки, которые не сочетаются с параметром запуска веб-сервера.
|
||
</simpara>
|
||
</note>
|
||
<warning>
|
||
<para>
|
||
Встроенный веб-сервер — <emphasis>экспериментальная</emphasis> функция,
|
||
которая <emphasis>не</emphasis> рассчитана на работу в производственном окружении;
|
||
сервер запускают <emphasis>только</emphasis> в целях разработки.
|
||
</para>
|
||
</warning>
|
||
|
||
<example>
|
||
<title>Запуск веб-сервера</title>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ cd ~/public_html
|
||
$ php -S localhost:8000
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
В консоли выведется:
|
||
</para>
|
||
<screen>
|
||
<![CDATA[
|
||
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
|
||
Listening on localhost:8000
|
||
Document root is /home/me/public_html
|
||
Press Ctrl-C to quit
|
||
]]>
|
||
</screen>
|
||
<para>
|
||
После URI-запросов http://localhost:8000/ и http://localhost:8000/myscript.html
|
||
в консоли выведется примерно следующее:
|
||
</para>
|
||
<screen>
|
||
<![CDATA[
|
||
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
|
||
Listening on localhost:8000
|
||
Document root is /home/me/public_html
|
||
Press Ctrl-C to quit.
|
||
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read
|
||
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read
|
||
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read
|
||
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read
|
||
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read
|
||
]]>
|
||
</screen>
|
||
<para>
|
||
Обратите внимание, что до PHP 7.4.0 статические ресурсы с символическими ссылками не были доступны в Windows, если только скрипт маршрутизатора не обработал бы их.
|
||
</para>
|
||
</example>
|
||
|
||
<example>
|
||
<title>Запуск с указанием корневой директории</title>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ cd ~/public_html
|
||
$ php -S localhost:8000 -t foo/
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
В консоли выведется:
|
||
</para>
|
||
<screen>
|
||
<![CDATA[
|
||
PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011
|
||
Listening on localhost:8000
|
||
Document root is /home/me/public_html/foo
|
||
Press Ctrl-C to quit
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>Скрипт маршрутизации</title>
|
||
<para>
|
||
В следующем примере при запросе изображений выводится графический файл,
|
||
а при запросе HTML-файлов возвращается строка "Добро пожаловать в PHP".
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
// router.php
|
||
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
|
||
return false; // Сервер возвращает файлы непосредственно
|
||
} else {
|
||
echo "<p>Добро пожаловать в PHP!</p>";
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php -S localhost:8000 router.php
|
||
]]>
|
||
</programlisting>
|
||
<warning>
|
||
<para>
|
||
Встроенный веб-сервер не должен использоваться в общедоступной сети.
|
||
</para>
|
||
</warning>
|
||
</example>
|
||
|
||
<example>
|
||
<title>Проверка использования веб-сервера CLI</title>
|
||
<para>
|
||
Для совместного использования скрипта маршрутизации при разработке с
|
||
веб-сервером CLI и в дальнейшем с рабочим (production) веб-сервером:
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
// router.php
|
||
if (php_sapi_name() == 'cli-server') {
|
||
/* Маршрутизация статических ресурсов и возврат значения false */
|
||
}
|
||
/* Продолжение стандартных операций с файлом index.php */
|
||
]]>
|
||
</programlisting>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php -S localhost:8000 router.php
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<example>
|
||
<title>Обработка неподдерживаемых типов файлов</title>
|
||
<para>
|
||
Для обслуживания статического ресурса, MIME-тип которого не обрабатывается
|
||
веб-сервером CLI, используйте это:
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
// router.php
|
||
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
|
||
if ($path["extension"] == "el") {
|
||
header("Content-Type: text/x-script.elisp");
|
||
readfile($_SERVER["SCRIPT_FILENAME"]);
|
||
} else {
|
||
return FALSE;
|
||
}
|
||
|
||
]]>
|
||
</programlisting>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php -S localhost:8000 router.php
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<example>
|
||
<title>Доступ к веб-серверу CLI с удалённых машин</title>
|
||
<para>
|
||
Следующая команда откроет доступ к веб-серверу на порту 8000 для всех сетевых интерфейсов:
|
||
</para>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ php -S 0.0.0.0:8000
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
</section>
|
||
<!--}}}-->
|
||
|
||
<section xml:id="features.commandline.ini">
|
||
<title>Опции конфигурации</title>
|
||
<para>
|
||
<table>
|
||
<title>Опции конфигурации CLI SAPI</title>
|
||
<tgroup cols="4">
|
||
<thead>
|
||
<row>
|
||
<entry>&Name;</entry>
|
||
<entry>&Default;</entry>
|
||
<entry>&Changeable;</entry>
|
||
<entry>&Changelog;</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody xml:id="features.commandline.ini.list">
|
||
<row>
|
||
<entry><link linkend="ini.cli-server.color">cli_server.color</link></entry>
|
||
<entry>"0"</entry>
|
||
<entry><constant>INI_ALL</constant></entry>
|
||
<entry></entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</para>
|
||
|
||
&ini.descriptions.title;
|
||
|
||
<para>
|
||
<variablelist>
|
||
<varlistentry xml:id="ini.cli-server.color">
|
||
<term>
|
||
<parameter>cli_server.color</parameter>
|
||
<type>bool</type>
|
||
</term>
|
||
<listitem>
|
||
<para>
|
||
Включает поддержку цветовых кодов ANSI в выводе терминала
|
||
встроенного веб-сервера.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
</section>
|
||
|
||
</chapter>
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=marker fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|