Comment vérifier avec PHP si le script est exécuté à partir de la console ou d'une requête du navigateur?
-
22-07-2019 - |
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?
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