2009-06-25 25 views
31

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

J'ai essayé! Empty ($ _ ENV [ « SHELL »]), mais cela ne fonctionne pas toujours non plus ...

Y at-il un moyen de vérifier ce qui fonctionne dans tous les systèmes d'exploitation/environnements?

Merci!

+0

Dupe http://stackoverflow.com/questions/607373/is-there-any-way-to-know-if-a-php-script-is-running-in-cli-mode –

Répondre

59

Utilisez php_sapi_name()

Renvoie une chaîne en minuscule qui décrit le type d'interface (l'API Server, SAPI) que PHP utilise. Par exemple, dans CLI PHP cette chaîne sera "cli" alors qu'avec Apache elle peut avoir plusieurs valeurs différentes selon le SAPI exact utilisé.

Par exemple:

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

Vous pouvez également utiliser la constante PHP_SAPI

-1

Vérifiez la HTTP_USER_AGENT, il doit exister dans la demande http

+0

Il y a toutes sortes de variables dans $ _SERVER cela fonctionne sous la même idée. –

+3

L'agent d'utilisateur est facultatif. Je ne compterais pas dessus, car il y a beaucoup mieux la solution –

2

Je sais que c'est une vieille question, mais pour le compte rendu, je vois des requêtes HTTP entrant sans utilisateur- L'en-tête de l'agent et PHP ne définissent pas automatiquement HTTP_USER_AGENT dans ce cas.

+0

Il a déjà été mentionné dans un commentaire ci-dessous, vous ne pouvez pas compter sur HTTP_USER_AGENT car c'est un en-tête optionnel. –

+0

Avez-vous déprécié ma réponse, puis laissé un commentaire disant exactement la même chose que j'ai dit, Nick? Agréable. Mon point, il y a 5 ans quand j'ai laissé ce commentaire, était de dire à l'OP que HTTP_USER_AGENT n'est pas fiable. – SteveK

+0

Oh wow, évidemment je l'ai mal lu. Rappel de ne pas naviguer sur SO tant qu'il est endormi. Pourriez-vous s'il vous plaît éditer votre réponse un peu pour que je puisse changer mon vote? Désolé pour ça. –

0

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!"); 
} 
1
if ($argc > 0) { 
    // Command line was used 
} else { 
    // Browser was used 
} 

$ argc coounts le montant des arguments passés à la ligne de commande. simplement en utilisant php page.php, $ argc retournera 1

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