Question

Existe-t-il un moyen de distinguer si un script a été appelé à partir de la ligne de commande ou par le serveur Web?

( Voir Quel est le moyen canonique de déterminer l’exécution d’un script PHP en ligne de commande ou en http? pour une meilleure réponse et une discussion plus détaillée - ne l’avait pas trouvée avant de poster)

J'ai un serveur (non de production) avec Apache 2.2.10 et PHP 5.2.6. Mon script PHP, maintenance_tasks.php , figure dans un répertoire accessible sur le Web. Je voudrais appeler ce script à partir de la ligne de commande ou via une requête HTTP (en l'ouvrant dans un navigateur). Existe-t-il une variable qui me permet de déterminer de manière fiable comment le script est appelé?

(J'ai déjà abordé les problèmes de vues différentes pour chaque type d'invocation et délai de réponse HTTP, cherchant simplement un moyen de distinguer les deux types d'invocation)

Je vais essayer différentes choses et ajouter mes conclusions ci-dessous.

Duplicate: Quel est le moyen canonique de déterminer l'exécution d'un script PHP en ligne de commande ou http?

Était-ce utile?

La solution

Si appelé à partir de la ligne de commande, la variable serveur HTTP_USER_AGENT n'est pas définie. J'utilise cette constante pour définir si le script doit être appelé en ligne de commande ou non:

define("CLI", !isset(

Si appelé à partir de la ligne de commande, la variable serveur HTTP_USER_AGENT n'est pas définie. J'utilise cette constante pour définir si le script doit être appelé en ligne de commande ou non:

<*>

MISE À JOUR: Cette réponse étant toujours marquée comme étant la réponse "correcte", j'aimerais réviser ma déclaration - en m'appuyant sur l'option "User-Agent". l'en-tête peut être problématique, car il s'agit d'une valeur définie par l'utilisateur.

Veuillez utiliser php_sapi_name () == 'cli' ou PHP_SAPI == 'cli' , comme suggéré par Eugene / cam8001 dans les commentaires.

Merci de l'avoir signalé!

SERVER['HTTP_USER_AGENT']));

MISE À JOUR: Cette réponse étant toujours marquée comme étant la réponse "correcte", j'aimerais réviser ma déclaration - en m'appuyant sur l'option "User-Agent". l'en-tête peut être problématique, car il s'agit d'une valeur définie par l'utilisateur.

Veuillez utiliser php_sapi_name () == 'cli' ou PHP_SAPI == 'cli' , comme suggéré par Eugene / cam8001 dans les commentaires.

Merci de l'avoir signalé!

Autres conseils

J'ai comparé le superglobal $ _ SERVER dans les deux invocations. Il semble que $ _ SERVER ['argc'] (c'est-à-dire le nombre d'arguments transmis au script) est uniquement défini lors de l'exécution à partir du shell / de la ligne de commande:

<?php
if (isset(

J'ai comparé le superglobal $ _ SERVER dans les deux invocations. Il semble que $ _ SERVER ['argc'] (c'est-à-dire le nombre d'arguments transmis au script) est uniquement défini lors de l'exécution à partir du shell / de la ligne de commande:

<*>

Cela semble fonctionner à la fois sur les hôtes Linux et Windows. (J'ai d'abord pensé à vérifier certaines variables d'environnement, mais celles-ci sont différentes pour chaque système d'exploitation. De plus, tous les en-têtes $ _ SERVER ['HTTP _ *']] sont manquants dans la version CLI, mais Je ne sais pas si c'est assez fiable.)

SERVER['argc'])) { define('CLI', true); } else { define('CLI', false); }

Cela semble fonctionner à la fois sur les hôtes Linux et Windows. (J'ai d'abord pensé à vérifier certaines variables d'environnement, mais celles-ci sont différentes pour chaque système d'exploitation. De plus, tous les en-têtes $ _ SERVER ['HTTP _ *']] sont manquants dans la version CLI, mais Je ne sais pas si c'est assez fiable.)

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