2009-06-25 9 views
31

Próbowałem rzeczy takich jak $ _ENV ['CLIENTNAME'] == 'Console', ale wydaje się, że działa tylko na niektórych systemach operacyjnych (pracował w Windows, a nie Linux).Jak sprawdzić w PHP, czy skrypt jest uruchamiany z żądania konsoli lub przeglądarki?

próbowałem! Empty ($ _ ENV [ „SHELL”]), ale to nie działa zawsze albo ...

Czy istnieje sposób na sprawdzenie tego, że będzie działać na wszystkich systemów operacyjnych/Środowiska?

Dzięki!

+0

Dupe http://stackoverflow.com/questions/607373/is-there-any-way-to-know-if-a-php-script-is-running-in-cli-mode –

Odpowiedz

59

Zastosowanie php_sapi_name()

Zwraca małą ciąg opisuje typ interfejsu (the API Server SAPI), że PHP jest używany. Na przykład w CLI PHP ten ciąg będzie "cli", podczas gdy w Apache może on mieć kilka różnych wartości w zależności od użytego SAPI.

Na przykład:

$isCLI = (php_sapi_name() == 'cli'); 

Można także użyć stałej PHP_SAPI

-1

Sprawdź HTTP_USER_AGENT, powinna istnieć w żądaniu http

+0

Istnieje wiele zmiennych w $ _SERVER które działają pod tą samą ideą. –

+3

Agent użytkownika jest opcjonalny. Nie liczę na to, ponieważ jest o wiele lepsze rozwiązanie –

2

wiem, jest to stara sprawa, ale dla porządku, widzę żądań HTTP w najbliższych bez czytelnymi Nagłówek agenta i PHP nie definiują automatycznie HTTP_USER_AGENT w tym przypadku.

+0

Zostało to już wspomniane w komentarzu poniżej, nie można polegać na HTTP_USER_AGENT, ponieważ jest to opcjonalny nagłówek. –

+0

Zgłosiłeś moją odpowiedź, a następnie zostawiłeś komentarz mówiąc dokładnie to samo, co powiedziałem, Nick? Miły. Moja uwaga, 5 lat temu, kiedy opuściłem ten komentarz, było powiedzieć OP, że HTTP_USER_AGENT nie jest wiarygodny. – SteveK

+0

Och, wow, oczywiście źle to odczytałem. Pamiętaj, aby nie przeglądać SO podczas snu. Czy mógłbyś nieco zmodyfikować swoją odpowiedź, aby zmienić swój głos? Przepraszam za to. –

0

Jednym rozwiązaniem jest sprawdzenie, czy STDIN jest zdefiniowana:

if (!defined("STDIN")) { 
    die("Please run me from the console - not from a web-browser!"); 
} 
1
if ($argc > 0) { 
    // Command line was used 
} else { 
    // Browser was used 
} 

$ argc coounts ilość argumentów przekazanych do linii poleceń. prostu za pomocą php page.php, $ argc powróci 1

Wywołanie page.php z przeglądarką, $ argc zwróci NULL