Differenze tra CLI e CGI
PHP può funzionare in diversi ambienti. L'ambiente più comune è CGI, che viene eseguito quando PHP elabora una richiesta HTTP. Tuttavia, è anche possibile eseguire uno script PHP dal terminale, nel qual caso è un cosiddetto compito CLI (Command-line interface).
Le differenze più importanti tra CLI e CGI
- A differenza di
CGI SAPI,CLInon scrive alcuna intestazione sull'output per default. - Ci sono alcune direttive
php.iniche sono sovrascritte inCLI SAPIperché non hanno senso in un ambiente shell: html_errors: il valore predefinito della CLI èFALSE.implicit_flush: il valore predefinito della CLI èTRUE.max_execution_time: il valore predefinito della CLI è0(illimitato)register_argc_argv: il valore predefinito della CLI èTRUE.- Lo script può accettare argomenti dalla linea di comando! La variabile
$argcdà il numero di argomenti passati all'applicazione. E il campo$argvti dà un array di argomenti reali - Ci sono 3 nuove costanti definite per l'ambiente della shell:
STDIN,STDOUT,STDERR. Tutti sono gestori di file per il dispositivo shell corrispondente. Per esempio,STDINè un gestore di file perfopen('php://stdin', 'r'). Quindi puoi leggere una linea daSTDINin questo modo:$strLine = trim(fgets(STDIN));. IlSTDINè già definito per te usando laPHP CLI. - La PHP CLI non cambia la directory corrente nella directory dello script in esecuzione. La directory corrente per lo script sarebbe la directory in cui si esegue il comando PHP CLI.
- Ci sono un certo numero di opzioni UTILI disponibili per la CLI di PHP. Che ti permettono di ottenere alcune informazioni preziose sul tuo setup php, il tuo script php o di eseguirlo in diverse modalità.
- In PHP 5 ci sono stati alcuni cambiamenti nei nomi dei file CLI e CGI. In PHP 5, la versione CGI è stata rinominata in
php-cgi.exe(precedentementephp.exe) e la versione CLI si trova ora nella directory principale (precedentementecli/php.exe). - Un nuovo modo è stato introdotto in PHP 5:
php-win.exe. Questo è equivalente alla versione CLI, eccetto che inphp-winnon viene stampato nulla, e quindi non fornisce alcuna console (non viene visualizzato alcun "dos box" sullo schermo). Questo comportamento è simile a quello diPHP GTK.