<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'features.commandline.interactive.php',
    1 => 'Shell interattiva',
    2 => 'Shell interattiva',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Command line usage',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.io-streams.php',
    1 => 'Flussi I/O',
  ),
  'next' => 
  array (
    0 => 'features.commandline.webserver.php',
    1 => 'Web server interno',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    '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">Shell interattiva</h2>

  <p class="para">
   La <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> fornisce una shell interattiva quando si usa l&#039;opzione
   <strong class="option unknown">-a</strong> se PHP è compilato con l&#039;opzione <strong class="option configure">--with-readline</strong>.
   Da PHP 7.1.0 la shell interattiva è anche disponibile su Windows, se
   l&#039;<a href="book.readline.php" class="link">estensione readline</a> è abilitata.
  </p>

  <p class="para">
   Utilizzando la shell interattiva si può digitare codice PHP ed eseguirlo
   direttamente.
  </p>

  <div class="example" id="example-1">
   <p><strong>Example #1 Esecuzione di codice con la shell interattiva</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">
   La shell interattiva fornisce anche il completamento automatic (tab completion) di funzioni,
   costanti, nomi di classe, variabili, metodi statici e costanti
   di classe.
  </p>

  <div class="example" id="example-2">
   <p><strong>Example #2 Tab completion</strong></p>
   <div class="example-contents"><p>
    Premere il tasto Tab due volte quando ci sono molteplici possibilità di completamento
    visualizzerà un elenco di questi elementi:
   </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>
    Quando esiste un solo completamento possibile, una pressione sul tasto tab
    completa il resto della linea:
   </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>
    Il completamento funziona anche per il nomi che sono stati definiti
    durante la sessione corrente della shell:
   </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="para">
   La shell interattiva archiva lo storico che può essere consultato usando i
   tasti su e giù. Lo storico è salvato nel file
   <var class="filename">~/.php_history</var>.
  </p>

  <p class="para">
   La <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> mette a disposizione
   le impostazioni <var class="filename">php.ini</var> <code class="parameter">cli.pager</code> e
   <code class="parameter">cli.prompt</code>. Il valore <code class="parameter">cli.pager</code>
   permette ad un programma esterno (come <var class="filename">less</var>) di
   agire come un paginatore per l&#039;output invece di visualizzarlo direttamente sullo
   schermo. Il parametro <code class="parameter">cli.prompt</code> permette di
   cambiare il prompt <code class="literal">php &gt;</code>.
  </p>

  <p class="para">
   È anche possibile impostare
   le impostazioni di <var class="filename">php.ini</var> nella shell interattiva utilizzando una notazione abbreviata.
  </p>

  <div class="example" id="example-3">
   <p><strong>Example #3 Impostare i valori del <var class="filename">php.ini</var> nella shell interattiva</strong></p>
   <div class="example-contents"><p>
    Il parametro <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>
   Utilizzando gli apici inversi è possibile eseguire codice PHP nel prompt:
   </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>
    Impostazione del paginatore a <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">
   Il parametro <code class="parameter">cli.prompt</code> ammette alcune sequenze di
   escape:
   <table class="doctable table">
    <caption><strong>Sequenze di escape di <code class="parameter">cli.prompt</code></strong></caption>
    
     <thead>
      <tr>
       <th>Sequenza</th>
       <th>Descriztione</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><code class="literal">\e</code></td>
       <td>
        Usata per aggiungere colori al prompt. Un esempio può essere
        <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>La versione del PHP.</td>
      </tr>

      <tr>
       <td><code class="literal">\b</code></td>
       <td>
        Indica in che tipo di blocco si trova PHP. Per esempio <code class="literal">/*</code>
        indica che si è in un commento multilinea. L&#039;ambito esterno è indicato da
        <code class="literal">php</code>.
       </td>
      </tr>

      <tr>
       <td><code class="literal">\&gt;</code></td>
       <td>
        Indica il caratter di prompt. L&#039;impostazione predefinita è
        <code class="literal">&gt;</code>, ma cambia quando la shell è all&#039;interno di un
        blocco non terminato o una stringa. I caratteri utilizzabili sono: <code class="literal">&#039; &quot; {
        ( &gt;</code>
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    I file inclusi con <a href="ini.core.php#ini.auto-prepend-file" class="link">auto_prepend_file</a> e <a href="ini.core.php#ini.auto-append-file" class="link">auto_append_file</a> sono analizzati in 
    questa modialità ma con qualche restrizione - es. le funzioni devono essere
    definite prima della chiamata.
   </p>
  </p></blockquote>
 </div><?php manual_footer($setup); ?>