International PHP Conference Berlin 2025

Differenze con gli altri SAPI

Le principali differenze tra la CLI SAPI e le altre SAPI sono:

  • A differenza di CGI SAPI, non sono inviate in output delle intestazioni.

    Mentre nella CGI SAPI esiste un modo per sopprimere le intestazioni HTTP, nella CLI SAPI non si ha una opzione per abilitare le intestazioni.

    Per default CLI parte in modalità silenziosa, si è mantenuto, comunque, l'opzione -q e --no-header per motivi di compatibilità; in questo modo si possono utlizzare i vecchi script CGI.

    Non cambia la directory di lavoro in quella dello script. (È rimasta l'opzione -C e --no-chdir per compatibilità)

    Messaggi di errore in formato testo (non formattati in HTML).

  • Esistono alcune direttive del php.ini che sono forzate nell'impostazione dalla CLI SAPI poiché non hanno senso nell'ambiente di shell:

    Direttive del php.ini forzate
    Direttiva CLI SAPI valore di default Commento
    html_errors false Il valore predefinito è false, dato che è difficile leggere i messaggi di errore nell'ambiente shell quando sono affogati in tag HTML non interpretati.
    implicit_flush true In un ambiente shell, è desiderabile che ogni tipo di output proveniente da print, echo e simili sia scritto immediatamente e non venga bufferizzato. Tuttavia è ancora possibile utilizzare le funzioni di buffering dell'output se si desidera ritardare o manipolare lo standard output.
    max_execution_time 0 (unlimited) PHP nell'ambiente di shell tende ad essere utilizzato per una gamma di scopi molto diverso dalle applicazioni per il Web, e questi possono avere tempi di esecuzione molto lunghi; Il tempo massimo di esecuzione è impostato a infinito.
    register_argc_argv true

    Impostare questo parametro a true significa che gli script eseguiti attraverso la CLI CLI SAPI hanno sempre accesso a argc (numero di argomenti passati all'applicazione) e argv (matrice degli argumenti).

    Le variabili PHP $argc e $argv sono automaticamente impostate ai valori appropriati quando si usa la CLI SAPI. Questi valori possono anche essere trovati nell'array $_SERVER, per esempio: $_SERVER['argv']

    output_buffering false

    Anche se il parametro nel php.ini è impostato a false, le funzioni Output buffering sono disponibili.

    max_input_time false

    La CLI PHP non accetta GET, POST o upload di file.

    Nota:

    Queste direttive non possono essere inizializate con altri valori dal file di configurazione php.ini o da uno personalizzato (se specifictao). Questa è una limitazione perché questi valori di default sono applicati dopo avere esaminato tutti i file di configurazione. Tuttavia i loro valori possono essere cambiati durante l'esecuzione (operazione che non ha senso per queste direttive, ad esempio register_argc_argv).

    Nota:

    It is recommended to set ignore_user_abort for command line scripts. See ignore_user_abort() for more information.

  • Per potere lavorare meglio con le shell, sono state definite delle costanti per gli stream I/O .

  • La CLI SAPI non cambia la directory corrente in quella dello script eseguito!

    Example #1 Il seguente esempio illustra la diferenza rispetto alla CGI SAPI:

    <?php
    // Semplice esempio di test chiamato test.php
    echo getcwd(), "\n";
    ?>

    Quando si usa la versione CGI, si avrà il seguente output:

    $ pwd
    /tmp
    
    $ php -q another_directory/test.php
    /tmp/another_directory
    

    Questo evidenzia chiaramente come il PHP cambi la directory corrente con quella in cui si trova lo script.

    Utilizzando la versione CLI SAPI abbiamo:

    $ pwd
    /tmp
    
    $ php -f another_directory/test.php
    /tmp
    

    Questo permette una grande flessibilità nello scrivere tools in PHP.

    Nota:

    La CGI SAPI supporta il comportamento della CLI SAPI attivando l'opzione -C quando viene eseguito da linea di comando.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top