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:
Direttiva | CLI SAPI valore di default | Commento |
---|---|---|
html_errors | FALSE |
È difficile leggere i messaggi di errore nella shell quando
sono affogati in tag HTML prive di significato;
pertanto il default della direttiva è impostato a FALSE .
|
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 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 |
max_input_time | FALSE |
la CLI PHP non accetta upload di file, GET o POST. |
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.