Tytuł jest dość prosty. Muszę wiedzieć po stronie serwera, czy skrypt wywołany przez żądanie HTTP, czy z wiersza poleceń. Mógłbym zbadać $_SERVER['argv']
lub $_SERVER['argc']
.
Jaki jest pragmatyczny na to sposób?
Jak odróżnić żądania http i cli?
Odpowiedzi (6)
http://us3.php.net/manual/en/function.php-sapi-name.php
<?php
echo PHP_SAPI;
echo php_sapi_name();
?>
person
Matthew
schedule
31.01.2010
+1 To jest droga. Miałem problemy ze sprawdzaniem zmiennych $_SERVER i tym podobnych. Ten zawsze działa.
- person Pekka; 31.01.2010
Spójrz na klucze w $_SERVER. Jeśli jest to żądanie CLI, nie powinieneś widzieć żadnego, które zaczyna się od „HTTP”.
Oto prosty kod testowy:
<?php
foreach( $_SERVER as $k=>$v ){
echo "$k: $v\n";
}
?>
A oto wynik:
aj@mmdev0:~/so$ php cli.php |grep HTTP
aj@mmdev0:~/so$
person
AJ.
schedule
31.01.2010
Nie ma potrzeby wykonywania pętli, gdy możesz przetestować tylko jedną wartość.
- person Matteo Riva; 31.01.2010
@kemp, pytanie OP dotyczyło w szczególności alternatyw dla argc
- person AJ.; 31.01.2010
Ewentualnie sprawdzasz, czy nie ustawiono $_SERVER['HTTP_HOST']
? Ponieważ uważam, że zmienna jest wypełniana przez nagłówki żądań wysyłane do pliku po wykonaniu, a wiersz poleceń prawdopodobnie nie wysyła nagłówków.
person
Tyler Carter
schedule
31.01.2010
Możesz sprawdzić, czy zmienna globalna $argc
jest ustawiona.
person
Matteo Riva
schedule
31.01.2010
Proponuję sprawdzić if(isset($_SERVER['SERVER_NAME']))
person
Traveling Tech Guy
schedule
31.01.2010
Nie jestem pewien, czy to nie jest ustawione. Może, zwłaszcza jeśli zdalnie wykonujesz plik PHP..
- person Tyler Carter; 31.01.2010
Myślę, że tablica $_SERVER jest zarezerwowana dla transakcji HTTP, ale możesz mieć rację. Nadal warto przejść przez różnych członków, ponieważ jestem pewien, że różnią się między wykonaniem lokalnym i zdalnym.
- person Traveling Tech Guy; 31.01.2010
Ale i tak musisz przesłać dane przez http (tcp) bez względu na to, czy skrypt jest wywoływany z cli, czy z przeglądarki
person
streetparade
schedule
31.01.2010