2009-06-02 26 views
9

Il est disponible au navigateur,comment faire un fichier PHP exécutable uniquement en mode CLI?

mais je ne veux pas exécuter lorsque vous y accédez par l'utilisateur,

dire, quand naviguerez devrait sortir,

est-il un moyen de détecter s'il est actuellement Cmmand Mode ligne?

+0

J'ai trouvé la réponse, je peux vérifier: isset ($ argv) – omg

+0

Vous devriez probablement utiliser php_sapi_name. C'est la façon acceptée de faire ce que vous voulez. –

+0

@Shore - Vous ne devriez vraiment pas utiliser $ argv. Il est contrôlé par un paramètre INI, pas CGI par rapport à CLI: http://us3.php.net/manual/fr/ini.core.php#ini.register-argc-argv –

Répondre

1

Voici une astuce:

Vous pouvez vérifier les paramètres argv argc de $/$ de qui sont toujours disponibles en mode CLI.

#!/usr/bin/php 
<?php 

ini_set('register_argc_argv', 0); 

if (!isset($argc) || is_null($argc)) 
{ 
    echo 'Not CLI mode'; 
} else { 
    echo 'CLI mode'; 
} 

register_argc_argv

$argc

+2

Pourquoi jouer avec les paramètres INI quand php_sapi_name() est conçu exactement dans ce but? –

+0

Il y a un autre problème, utiliser de cette façon, lors du débogage dans Zend, il est également traité comme "mode non CLI" même quand il est réellement – omg

1

Une autre astuce, $_SERVER a des variables qui ne sont définies en mode CLI.

2

Voici ce que j'utilise, depuis longtemps maintenant ... (depuis PHP 4 IIRC)

(PHP_SAPI !== 'cli' || isset($_SERVER['HTTP_USER_AGENT'])) && die('cli only'); 

à être utilisé comme première ligne du script php.