php_sapi_name

php_sapi_name()

Gibt den Namen der Schnittstelle zurück, über die PHP läuft: „cli“ auf der Kommandozeile, „apache2handler“ als Apache-Modul, „fpm-fcgi“ unter PHP-FPM, „cgi-fcgi“ über FastCGI. Die Konstante PHP_SAPI hat denselben Wert.

Beispiele

var_dump(php_sapi_name() === PHP_SAPI); // bool(true)
// ein Skript nur für die Kommandozeile oder Cron
function command_line_only() {
    if (php_sapi_name() !== "cli") {
        http_response_code(403);
        exit("Nur über die Kommandozeile starten.");
    }
}
// command_line_only();
// das Zeilenende je nach Umgebung
$eol = PHP_SAPI === "cli" ? PHP_EOL : "<br>";

Worauf Sie achten sollten

  • Der eingebaute Server (php -S) liefert „cli-server“, nicht „cli“.
  • Auf der Kommandozeile fehlen die Daten der Anfrage: $_SERVER["HTTP_HOST"], $_SERVER["REQUEST_URI"], Cookies, das Session-Cookie. Ein Cron-Skript darf sich nicht auf sie verlassen.
  • Sicherer ist es, Cron-Skripte außerhalb des öffentlichen Ordners der Website abzulegen. Die Prüfung von php_sapi_name() ist eine zusätzliche Absicherung.
  • Auf der Kommandozeile ist max_execution_time 0, und oft wird eine andere php.ini als für das Web verwendet.

Verwandte Funktionen:
phpversion()
getenv()
http_response_code()
getopt()