Wesentliche Unterschiede der CLI-SAPI zu anderen SAPIs:
Anders als bei der CGI-SAPI werden keine Header ausgegeben.
Obwohl die CGI-SAPI eine Option bietet, HTTP-Header zu unterdrücken, gibt es keine gleichwertige Option, sie in der CLI SAPI anzuzeigen.
CLI wird standardmäßig im stillen Modus gestartet, dennoch gibt es die Optionen -q und --no-header aus Kompatibilitätsgründen noch, so dass Sie auch ältere CGI-Skripte noch verwenden können.
Es wechselt das Arbeitsverzeichnis nicht in das des Skriptes. (Die Optionen -C und --no-chdir wurden aus Kompatibilitätsgründen beibehalten.)
Fehlermeldungen im Klartext (keine HTML-Formatierung).
Es gibt bestimmte php.ini-Direktiven, die von der CLI SAPI außer Kraft gesetzt werden, weil sie in einer Kommandozeilenumgebung keinen Sinn ergeben.
Direktive | CLI SAPI-Standardwert | Kommentar |
---|---|---|
html_errors | false |
Es kann sehr schwierig sein, eine Fehlermeldung auf der
Kommandozeile zu lesen, wenn sie mit all diesen bedeutungslosen
HTML-Tags vollgestopft ist, deswegen wird diese
Direktive auf false gesetzt.
|
implicit_flush | true |
Es ist normalerweise erwünscht, dass alle Ausgaben, die von print, echo und Konsorten kommen, sofort auf die Ausgabe geschrieben werden und nicht in einem Puffer gecacht werden. Sie können jedoch immer noch output buffering verwenden, wenn Sie die Standardausgabe aufschieben oder manipulieren wollen. |
max_execution_time | 0 (unendlich) | Da die Anwendungsbereiche von Kommandozeilenanwendungen deutlich unterschiedlicher sind als die von Web-Applikationen und da diese oft lange Laufzeiten besitzen, wird die maximale Ausführungszeit auf unendlich gesetzt. |
register_argc_argv | true |
Weil diese Einstellung auf Die PHP-Variablen $argc und $argv werden automatisch mit den entsprechenden Werten gefüllt, wenn die CLI-SAPI verwendet wird. Diese Werte können auch im $_SERVER-Array gefunden werden, beispielsweise: $_SERVER['argv']. |
output_buffering | false |
Auch wenn diese php.ini-Option fest auf |
max_input_time | false |
Die PHP-CLI unterstützt GET, POST und Dateiuploads nicht. |
Hinweis:
Diese Direktiven können nicht mit einem anderen Wert aus der Konfigurationsdatei php.ini oder einer eigenen (falls angegeben) initialisiert werden. Diese Einschränkung ergibt sich dadurch, dass diese Standardwerte angewandt werden, nachdem alle Konfigurationsdateien gelesen wurden. Dennoch können die Werte zur Laufzeit verändert werden (was aber nicht für alle dieser Direktiven einen Sinn ergibt, beispielsweise register_argc_argv).
Hinweis:
Es wird empfohlen ignore_user_abort für Kommandozeilenanwendungen zu setzen. Siehe ignore_user_abort() für weitere Informationen.
Um die Arbeit in der Kommandozeilenumgebung zu erleichtern, wurden einige Konstanten für Ein- und Ausgabestreams definiert.
Die CLI SAPI wechselt das aktuelle Arbeitsverzeichnis nicht ins Verzeichnis des ausgeführten Skripts.
Beispiel #1 Beispiel, welches den Unterschied zur CGI-SAPI verdeutlicht:
<?php
// Unsere einfache Anwendung namens test.php
echo getcwd(), "\n";
?>
Bei der CGI-Version ist die Ausgabe folgende:
$ pwd /tmp $ php -q anderes_verzeichnis/test.php /tmp/anderes_verzeichnis
Dies zeigt deutlich, dass PHP vom aktuellen Verzeichnis in das des ausgeführten Skriptes wechselt.
Nutzung der CLI SAPI führt zu folgender Ausgabe:
$ pwd /tmp $ php -f anderes_verzeichnis/test.php /tmp
Dies ermöglicht eine größere Flexibilität beim Erstellen von Kommandozeilenanwendungen in PHP.
Hinweis:
Die CGI-SAPI unterstützt das Verhalten der CLI SAPI durch Angabe der Option -C beim Starten von der Kommandozeile.