Start · Sprachen · PHP · Referenz · php_sapi_name

php_sapi_name

Funktion

Gibt den Namen des Server API (SAPI) zurück, über das PHP aktuell ausgeführt wird (z. B. <code>cli</code>, <code>fpm-fcgi</code>, <code>apache2handler</code>).

seit PHP 4.0.1 Kategorie: misc

Signatur

php_sapi_name(): string|false

Beschreibung

php_sapi_name() liefert einen Kleinbuchstaben-String, der das aktive PHP-Interface zwischen PHP und dem Webserver (bzw. der Laufzeitumgebung) identifiziert. Typische Rückgabewerte sind cli (Kommandozeile), cli-server (eingebauter Entwicklungsserver), fpm-fcgi (PHP-FPM), apache2handler (mod_php unter Apache) oder cgi-fcgi (klassisches CGI/FastCGI).

Die Funktion ist vor allem nützlich, wenn sich das Verhalten eines Skripts je nach Ausführungskontext unterscheiden soll – etwa um festzustellen, ob ein Skript auf der Kommandozeile oder im Webserver-Kontext läuft. Das ermöglicht z. B. unterschiedliche Fehlerausgaben, Ausgabepuffer-Strategien oder das Verhindern von CLI-only-Operationen im Webkontext.

Als Alternative steht die Konstante PHP_SAPI bereit, die denselben Wert enthält und als Konstante etwas schneller aufgelöst werden kann, da kein Funktionsaufruf nötig ist.

Beachte, dass der genaue String SAPI-abhängig ist und sich zwischen PHP-Versionen oder Buildkonfigurationen unterscheiden kann. Prüfungen sollten daher robust formuliert werden (z. B. strpos statt striktem Vergleich, wenn mehrere CGI-Varianten abgedeckt werden sollen).

Rückgabewert

Typ
string|false
Beschreibung
Gibt einen Kleinbuchstaben-String mit dem SAPI-Namen zurück. Im unwahrscheinlichen Fall, dass kein SAPI-Name ermittelt werden kann, wird false zurückgegeben.

Beispiele

CLI-Kontext erkennen und reagieren

<?php
$sapi = php_sapi_name();

if ($sapi === 'cli') {
    echo "Skript wird auf der Kommandozeile ausgeführt." . PHP_EOL;
} else {
    echo "Skript läuft im Webserver-Kontext (SAPI: {$sapi}).";
}
Skript wird auf der Kommandozeile ausgeführt.

Mehrere SAPI-Typen unterscheiden

<?php
function getSapiKind(): string
{
    $sapi = PHP_SAPI; // Konstante ist äquivalent zu php_sapi_name()

    if ($sapi === 'cli' || $sapi === 'phpdbg') {
        return 'Kommandozeile';
    }

    if (str_contains($sapi, 'fcgi') || $sapi === 'fpm-fcgi') {
        return 'FastCGI / PHP-FPM';
    }

    if (str_contains($sapi, 'apache')) {
        return 'Apache (mod_php)';
    }

    return 'Unbekannt / Sonstiges';
}

echo getSapiKind() . PHP_EOL;
// Beispielausgabe (abhängig von der Umgebung):
// FastCGI / PHP-FPM
FastCGI / PHP-FPM

Verwendung der Konstante PHP_SAPI

<?php
// PHP_SAPI ist identisch mit php_sapi_name(), aber als Konstante schneller
echo PHP_SAPI . PHP_EOL; // z. B. "cli"
echo php_sapi_name() . PHP_EOL; // identische Ausgabe
cli cli

// Wichtig · Fallstricke

Portabilität: Verlasse dich nicht auf einen fixen String-Vergleich, wenn dein Code unter unterschiedlichen Server-Konfigurationen laufen soll. Die SAPI-Bezeichner können je nach Plattform oder Build leicht variieren (z. B. cgi vs. cgi-fcgi).

Performance: Da PHP_SAPI eine Konstante ist, die beim PHP-Start gesetzt wird, ist ihr Zugriff minimal schneller als ein Funktionsaufruf. In performance-kritischem Code ist die Konstante daher vorzuziehen.

Sicherheit: Verwende php_sapi_name() niemals als einzigen Sicherheitsmechanismus (z. B. um Admin-Skripte nur für CLI zugänglich zu machen), da der SAPI-Name unter bestimmten Umständen manipulierbar sein kann. Setze zusätzlich Datei-System-Berechtigungen oder Webserver-Konfigurationen ein.