Wie mit PHP überprüfen, ob das Skript von der Konsole oder Browser-Anfrage ausgeführt wird?
-
22-07-2019 - |
Frage
Ich habe versucht, Dinge wie $ _ENV [ ‚CLIENT‘] == ‚Console‘, aber das scheint nur bestimmte Betriebssysteme (in den Fenstern gearbeitet, nicht Linux) zu arbeiten.
Ich habe versucht! Empty ($ _ ENV [ 'SHELL']), aber das immer funktioniert auch nicht ...
Gibt es eine Möglichkeit, dies zu überprüfen, die in allen OS / Umgebungen funktionieren wird?
Lösung
Verwenden Sie php_sapi_name()
Gibt eine Zeichenfolge, die Klein beschreibt die Art der Schnittstelle (die Server-API, SAPI), dass PHP verwendet. Zum Beispiel in CLI PHP diese Zeichenfolge wird „cli“, während mit Apache es kann mehrere verschiedene Werte abhängig von dem verwendeten genauen SAPI.
Zum Beispiel:
$isCLI = ( php_sapi_name() == 'cli' );
Sie können auch die Konstante PHP_SAPI
verwenden
Andere Tipps
Überprüfen Sie auf http://php.net/manual/en/features. commandline.php # 105568 "PHP_SAPI" Konstante
<?php
if (PHP_SAPI === 'cli')
{
// ...
}
?>
Ich weiß, dass dies eine alte Frage, aber die Ordnung halber, ich sehe HTTP-Anfragen kommen in ohne User-Agenten-Header und PHP nicht automatisch HTTP_USER_AGENT in diesem Fall definieren.
if ($argc > 0) {
// Command line was used
} else {
// Browser was used
}
$ argc coounts die Menge der Argumente an die Befehlszeile übergeben. Einfach php page.php verwenden, $ argc 1 zurück
Beim page.php mit einem Browser, $ argc NULL zurück
Eine Lösung besteht darin zu prüfen, ob STDIN definiert:
if (!defined("STDIN")) {
die("Please run me from the console - not from a web-browser!");
}
Überprüfen Sie die HTTP_USER_AGENT, sollte es in HTTP-Anforderung existieren