2012-09-18 18 views
5

Tengo un script que tiene varias funciones con parámetros diferentes. ¿Es posible llamar a cualquiera de estas funciones desde la línea de comando y pasar los argumentos en lugar de tener que codificar las llamadas a funciones en el script?Llamar a una función en un script PHP desde la línea de comando

FYI: Yo sé cómo ejecutar un simple script PHP desde la línea de comandos

no acaba de llamar a la función, recuerde script.php tiene alrededor de 5 diferentes funciones y estoy buscando a llamar a sólo 1, es posible

Respuesta

8

No, no puedes hacer eso directamente. Usted tiene algunas opciones:

  • poner cada función en un archivo PHP separado y llamar al archivo php
  • utilizar el primer argumento pasado al archivo php como el nombre de la función, y escribir unas pocas líneas de código para selecciona la función correcta.

Actualización:

Aquí es un ejemplo de cómo utilizar el primer parámetro pasado como una llamada a la función:

if(function_exists($argv[1])) 
    call_user_func_array($argv[1], $argv); 
+1

No, getopt() puede, ¿por qué este upvoted? – wesside

+2

porque responde la pregunta. – artragis

+0

@artragis es inútil sin un ejemplo. – wesside

0

getopt() toma parámetros de la CLI.

php /path/to/myscript.php -a foo -b bar -c baz 

$arguments = getopt("a:b:c:"); 

print_r($arguments); 

    Array 
    (
     [a] => foo 
     [b] => bar 
     [c] => baz 
    ) 

Que sea una función $arguments[a](); llamar foo(); puede pasar en B también si tiene una función arg.

+2

él quiere llamar a una función particular en script.php, pasando args a ella, no solo ejecutar script.php – ernie

+0

Me doy cuenta, tómalo con calma. – wesside

0

No es 100% seguro de lo que estás pidiendo, pero la ejecución sería algo así como

php script.php arg1 arg2 arg3 

Parece que sabes ya que. El método para acceder a esos argumentos dentro del script en sí sería usar la variable , por lo que $argv[0] sería el script, $argv[1] sería "arg1", etc. Si eso no funciona, entonces use $_SERVER['argv'].

cuanto a las opciones, se puede analizar con getopt

3

php script.php arg1 arg2 acceder a ellas como $ argv [1], $ argv [2] ... y así sucesivamente, en el script.

+0

¿cómo vas a obtener $ argv? – wesside

+0

http://php.net/manual/en/reserved.variables.argv.php –

+0

nice, no sabía de este. – wesside

0

Puede hacer que el script de línea de comandos use su primer argumento como la función a llamar y, posteriormente, los argumentos que se le pasen. Los argumentos aparecerán en la variable de matriz mágica .

// Zero'th "argument" is just the name of your PHP script 
$name_of_php_script = array_unshift($argv); 
// Next argument will be your callback 
$callback = array_unshift($argv); 
// Remaining arguments are your parameters 
call_user_func_array($callback, $argv); 

Obviamente, es posible que desee hacer las cosas más complicadas para la seguridad o para pasar de valores especiales de algún tipo, pero esto lo hace la lógica básica que usted describe en la pregunta.

0

Puede escribir una opción, luego pasar la función a eso, por ejemplo, myscript.php -función mi_funcion

a continuación en el script llama a la función como

$argv[1]() 
Cuestiones relacionadas