Qu'est-ce que la manière canonique pour déterminer la ligne de commande vs http exécution d'un script PHP?
J'ai un script PHP qui doit déterminer si elle a été exécutée via la ligne de commande ou via HTTP, principalement pour la sortie des raisons de formatage. Quelle est la manière canonique de faire cela? J'avais pensé qu'il était d'inspecter SERVER['argc']
, mais il s'avère que c'est peuplée, même lors de l'utilisation de la " Apache 2.0 Gestionnaire de serveur de l'API.
Vous devez vous connecter pour publier un commentaire.
Utiliser le
php_sapi_name()
fonction.Voici quelques notes pertinentes de la documentation:
En PHP >= 4.2.0, il y a aussi une constante prédéfinie,
PHP_SAPI
, qui a la même valeur quephp_sapi_name()
.php_sapi_name
renvoie la même valeur en HTTP ou en ligne de commande (exemple : 'cgi-fcgi'). Ils sont de meilleures solutions.Ce le sera toujours. (Si la version de PHP est 4.2.0 ou plus)
Qui le rend facile à utiliser sur le dessus de vos scripts:
CLI or die('not allowed');
CLI or die('not allowed');
est parfait.Which makes it easy to use at the top of your scripts
n'a pas vraiment le faire sonner comme deux utilisations. Oui, je suis un nécromancien.Ici est Drupal 7 mise en œuvre: drupal_is_cli():
Cependant Drupal 8 recommande à l'aide de
PHP_SAPI === 'cli'
Je pense que
ne sera pas rempli à partir de la CLI.
Aussi, tous les HTTP_* clés dans la variable $_SERVER superglobale de ne pas être rempli à partir de la CLI, ou de faire de la bonne façon hop viennent d'être mentionnés 🙂
La page de documentation pour
php_sapi
_name indique clairement la façon dont il fonctionne:Je ne suis pas sûr pourquoi hop ne pense pas que PHP est grave pour les programmeurs (je suis un programmeur sérieux, et j'utilise le PHP par jour), mais si il veut aider à clarifier la documentation alors peut-être il peut la vérification de tous les possible de serveurs web PHP peut fonctionner sur et de déterminer les noms de tous les possibles de types d'interface pour chaque serveur. Assurez-vous de garder cette liste à jour en tant que de nouveaux serveurs web et les interfaces sont ajoutés.
Aussi, Bobby a dit:
La description pour les états d'exemple: