Mam skrypt PHP, który musi określić, czy został wykonany za pomocą wiersza poleceń, czy przez HTTP, głównie w celu formatowania danych wyjściowych. Jaki jest kanoniczny sposób na zrobienie tego? Myślałem, że to inspekcja SERVER['argc']
, ale okazuje się, że jest to zapełnione, nawet podczas korzystania z interfejsu API serwera „Apache 2.0 Handler”.
źródło
To zawsze zadziała. (Jeśli wersja PHP to 4.2.0 lub nowsza)
Co sprawia, że jest łatwy w użyciu u góry skryptów:
źródło
CLI or die('not allowed');
CLI or die('not allowed');
jest doskonały.Which makes it easy to use at the top of your scripts
nie sprawia, że brzmi to jak dwa oddzielne zastosowania. Tak, jestem nekromantą.Oto implementacja Drupal 7: drupal_is_cli () :
Jednak Drupal 8 zaleca używanie
PHP_SAPI === 'cli'
źródło
Myślę
nie zostanie wypełniony z CLI.
Ponadto wszystkie klucze HTTP_ * w superglobalnej $ _SERVER nie zostaną wypełnione z CLI, lub zrobią to we właściwy sposób, o którym właśnie wspomniano :-)
źródło
Strona dokumentacji dla
php_sapi
_name jasno określa, jak to działa:Nie jestem pewien, dlaczego Hop nie uważa, że PHP jest dla poważnych programistów (jestem poważnym programistą i używam PHP na co dzień), ale jeśli chce pomóc w wyjaśnieniu dokumentacji, być może może przeprowadzić audyt wszystkich możliwych serwerów internetowych na którym PHP może działać i określa nazwy wszystkich możliwych typów interfejsów dla każdego serwera. Po prostu pamiętaj, aby aktualizować tę listę w miarę dodawania nowych serwerów internetowych i interfejsów.
Ponadto Bobby powiedział:
Opis przykładu stwierdza:
źródło