2009-06-02 12 views
9

Está disponible para el navegador,cómo hacer que un archivo PHP pueda ejecutarse solo a través del modo CLI?

pero no quiero que se ejecute cuando se navegado por el usuario,

decir, cuando navegado debe salir,

hay una manera de detectar si se trata de la actualidad Cmmand Modo de línea?

+0

He encontrado la respuesta, puedo verificar: isset ($ argv) – omg

+0

Probablemente sea mejor que uses php_sapi_name. Es la forma aceptada de hacer lo que quieres. –

+0

@Shore: realmente no deberías usar $ argv. Está controlado por una configuración INI, no CGI vs. CLI: http://us3.php.net/manual/en/ini.core.php#ini.register-argc-argv –

Respuesta

1

Aquí es un truco:

Puede comprobar si los $ argc/argv $ parámetros que siempre están disponibles en el modo 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

¿Por qué alterar las configuraciones INI cuando php_sapi_name() está diseñado exactamente para este propósito? –

+0

Hay otro problema, use esto, cuando se depura en Zend, también se trata como "modo no CLI" incluso cuando es realmente – omg

1

Otro truco, $_SERVER tiene variables que sólo se fijan en el modo CLI.

2

Aquí es lo que estoy usando, por mucho tiempo ... (a partir de PHP 4 IIRC)

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

para ser utilizado como primera línea del script php.

Cuestiones relacionadas