<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.commandline.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'features.commandline.interactive.php',
    1 => 'Интерактивная консоль',
    2 => 'Интерактивная консоль',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Работа с PHP из командной строки',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.io-streams.php',
    1 => 'Потоки ввода-вывода',
  ),
  'next' => 
  array (
    0 => 'features.commandline.webserver.php',
    1 => 'Встроенный веб-сервер',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'features/commandline.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.commandline.interactive" class="section">
  <h2 class="title">Интерактивная консоль</h2>

  <p class="para">
   Модуль <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> поддерживает интерактивную консоль, которую запускает
   опция <strong class="option unknown">-a</strong>, если PHP скомпилировали с параметром
   <strong class="option configure">--with-readline</strong>.
   Начиная с PHP PHP 7.1.0 интерактивная консоль также доступна в ОС Windows,
   если <a href="book.readline.php" class="link">модуль readline</a> включили.
  </p>

  <p class="para">
   Интерактивная консоль умеет принимать и выполнять сам PHP-код.
  </p>

  <div class="example" id="example-1">
   <p><strong>Пример #1 Запуск кода в интерактивной консоли</strong></p>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">$ php -a
Interactive shell

php &gt; echo 5+8;
13
php &gt; function addTwo($n)
php &gt; {
php { return $n + 2;
php { }
php &gt; var_dump(addtwo(2));
int(4)
php &gt;</pre>
</div>
   </div>

  </div>

  <p class="para">
   Интерактивная консоль при нажатии клавиши Tab также автодополняет
   названия функций, констант, классов, переменных, вызовы
   статических методов и константы классов.
  </p>

  <div class="example" id="example-2">
   <p><strong>Пример #2 Автодополнение по клавише Tab</strong></p>
   <div class="example-contents"><p>
    Двойное нажатие клавиши Tab покажет список вариантов,
    если доступно больше одного варианта дополнения:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; strp[TAB][TAB]
strpbrk   strpos    strptime
php &gt; strp</pre>
</div>
   </div>

   <div class="example-contents"><p>
    Когда есть только одно дополнение, одиночное нажатие
    Tab дополнит оставшийся текст на той же самой строке:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; strpt[TAB]ime(</pre>
</div>
   </div>

   <div class="example-contents"><p>
    Дополнение также работает для имён, которые объявили
    в течение текущей интерактивной сессии:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; $fooThisIsAReallyLongVariableName = 42;
php &gt; $foo[TAB]ThisIsAReallyLongVariableName</pre>
</div>
   </div>

  </div>

  <p class="simpara">
   Интерактивная оболочка хранит историю команд, для доступа к которой
   нажимают стрелки вверх и вниз.
   История хранится в файле <var class="filename">~/.php_history</var>.
   Начиная с PHP 8.4.0 установить путь к файлу с историей команд можно
   в переменной окружения <var class="envar">PHP_HISTFILE</var>.
  </p>

  <p class="para">
   Модуль <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> поддерживает две новые настройки в файле <var class="filename">php.ini</var>:
   <code class="parameter">cli.pager</code> и <code class="parameter">cli.prompt</code>.
   Директива <code class="parameter">cli.pager</code> разрешает использовать
   внешнюю программу наподобие <var class="filename">less</var>
   для постраничного просмотра, а не прямого вывода данных на экран.
   Настройка <code class="parameter">cli.prompt</code> разрешает задавать
   приглашение <code class="literal">php &gt;</code> на ввод команды.
  </p>

  <p class="para">
   В интерактивной консоли также разрешается устанавливать настройки
   файла <var class="filename">php.ini</var> через специальное сокращение.
  </p>

  <div class="example" id="example-3">
   <p><strong>Пример #3 Установка настройки файла <var class="filename">php.ini</var> в интерактивной консоли</strong></p>
   <div class="example-contents"><p>
    Настройка <code class="parameter">cli.prompt</code>:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; #cli.prompt=hello world :&gt;
hello world :&gt;</pre>
</div>
   </div>

   <div class="example-contents"><p>
    Обратными кавычками задают PHP-код, который
    выполнится в приглашении на ввод команды:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; #cli.prompt=`echo date(&#039;H:i:s&#039;);` php &gt;
15:49:35 php &gt; echo &#039;hi&#039;;
hi
15:49:43 php &gt; sleep(2);
15:49:45 php &gt;</pre>
</div>
   </div>

   <div class="example-contents"><p>
    Установка <var class="filename">less</var> для постраничного вывода данных:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; #cli.pager=less
php &gt; phpinfo();
(output displayed in less)
php &gt;</pre>
</div>
   </div>

  </div>

  <p class="para">
   Настройка <code class="parameter">cli.prompt</code> поддерживает
   несколько управляющих последовательностей:
   <table class="doctable table">
    <caption><strong>Управляющие последовательности <code class="parameter">cli.prompt</code></strong></caption>
    
     <thead>
      <tr>
       <th>Управляющая последовательность</th>
       <th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><code class="literal">\e</code></td>
       <td>
        Используется для добавления цветов в приглашение на ввод команды.
        Пример: <code class="literal">\e[032m\v \e[031m\b \e[34m\&gt; \e[0m</code>
       </td>
      </tr>

      <tr>
       <td><code class="literal">\v</code></td>
       <td>Версия PHP.</td>
      </tr>

      <tr>
       <td><code class="literal">\b</code></td>
       <td>
        Отображает в какой части PHP мы находимся. Для примера <code class="literal">/*</code>
        показывает, что мы находимся в многострочном комментарии. Внешняя область
        видимости обозначается как <code class="literal">php</code>.
       </td>
      </tr>

      <tr>
       <td><code class="literal">\&gt;</code></td>
       <td>
        Указывает символ приглашения. По умолчанию это символ <code class="literal">&gt;</code>,
        но можно изменить, когда оболочка находится внутри незакрытого блока или строки.
        Возможные символы: <code class="literal">&#039; &quot; { ( &gt;</code>
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Файлы, подключённые с помощью опций
    <a href="ini.core.php#ini.auto-prepend-file" class="link">auto_prepend_file</a> и
    <a href="ini.core.php#ini.auto-append-file" class="link">auto_append_file</a>
    обрабатываются в этом режиме с некоторыми ограничениями,
    например, функции должны быть объявлены до их использования.
   </p>
  </p></blockquote>

  <div class="section" id="features.commandline.interactive.mode">
   <h2 class="title">Интерактивный режим</h2>
   <p class="para">
    До PHP 8.1.0 при недоступности модуля readline вызов файла <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>
    с параметром <strong class="option unknown">-a</strong> запускал интерактивный режим.
    В этом режиме предполагается, что PHP-скрипт передадут целиком через стандартный
    входной поток STDIN, затем завершат ввод комбинацией клавиш
    <kbd class="keycombo">
     <kbd class="keycap">CTRL</kbd>
     +<kbd class="keycap">D</kbd>
    </kbd>
    (в POSIX-системах) или комбинацией
    <kbd class="keycombo">
     <kbd class="keycap">CTRL</kbd>
     +<kbd class="keycap">Z</kbd>
    </kbd>,
    за которой идёт клавиша <code class="literal">ENTER</code> (в ОС Windows), после чего скрипт обработается.
    По сути это то же самое, что и вызов <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> без параметра <strong class="option unknown">-a</strong>.
    option.
   </p>
   <p class="para">
    Начиная с PHP 8.1.0 при недоступности модуля readline вызов <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>
    с параметром <strong class="option unknown">-a</strong> завершается ошибкой.
   </p>
  </div>
 </div><?php manual_footer($setup); ?>