Comment vérifier avec PHP si le script est exécuté à partir de la console ou d'une requête du navigateur?

StackOverflow https://stackoverflow.com/questions/1042501

Question

J'ai essayé des choses comme $ _ENV ['CLIENTNAME'] == 'Console' mais cela ne semble fonctionner que sur certains systèmes d'exploitation (fonctionnant sous Windows, pas sous Linux).

J'ai essayé! empty ($ _ ENV ['SHELL']) mais ça ne marche pas toujours non plus ...

Y a-t-il un moyen de vérifier cela qui fonctionnera dans tous les environnements / systèmes d'exploitation?

Était-ce utile?

La solution

Utilisez php_sapi_name ()

  

Retourne une chaîne en minuscule   décrit le type d'interface (le   API de serveur, SAPI) que PHP utilise.   Par exemple, en PHP CLI, cette chaîne   sera " cli " alors qu'avec Apache   peut avoir plusieurs valeurs différentes   en fonction de la SAPI exacte utilisée.

Par exemple:

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

Vous pouvez également utiliser la constante PHP_SAPI

Autres conseils

Vérifiez sur http://php.net/manual/en/features. commandline.php # 105568 " PHP_SAPI " Constante

<?php
if (PHP_SAPI === 'cli')
{
   // ...
}
?> 

Je sais que c'est une vieille question, mais pour mémoire, je vois des requêtes HTTP arriver sans en-tête User-Agent et PHP ne définit pas automatiquement HTTP_USER_AGENT dans ce cas.

if ($argc > 0) {
    // Command line was used
} else {
    // Browser was used
}

$ argc calcule la quantité d'arguments passés à la ligne de commande. En utilisant simplement php page.php, $ argc renverra 1

Appelant page.php avec un navigateur, $ argc retournera NULL

Une solution consiste à vérifier si STDIN est défini:

if (!defined("STDIN")) {
    die("Please run me from the console - not from a web-browser!");
}

Vérifiez HTTP_USER_AGENT, il devrait exister dans la requête http

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top