2011-06-08 13 views
14

Estoy queriendo llamar a un archivo php usando exec.llamando a exec en un archivo php y pasando parámetros?

Cuando lo llamo quiero poder pasar una variable (una identificación).

Puedo llamar a echo exec("php /var/www/unity/src/emailer.php"); bien, pero en el momento en que agrego algo como echo exec("php /var/www/unity/src/emailer.php?id=123");, falla la llamada de la ejecutiva.

¿Cómo puedo hacer esto?

Respuesta

25

Su llamada está fallando porque usted está utilizando un estilo de Web sintaxis (?parameter=value) con una invocación de línea de comando. Entiendo lo que estás pensando, pero simplemente no funciona.

En su lugar, querrá usar . Ver the PHP manual.

Para ver esto en acción, escribir esto de una sola línea en un archivo:

<?php print_r($argv); ?> 

continuación, se invoca desde la línea de comandos con argumentos:

php -f /path/to/the/file.php firstparam secondparam 

verá que contiene el nombre del script en sí mismo como elemento cero, seguido de cualquier otro parámetro que haya pasado.

+3

¿Cuál es el parámetro -f para? – Hailwood

+4

Esa es una especie de pregunta profunda, realmente. Si haces php --help desde la línea de comandos, dice esto: "-f Parse y ejecuta ." Pero dado que PHP lo hace de todos modos (sin invocar la opción -f), creo que es una buena pregunta: ¿para qué sirve? :) –

+3

Tal vez es para personas con TOC que TIENEN que pasar una bandera;) – Hailwood

2

intente echo exec("php /var/www/unity/src/emailer.php 123"); en su secuencia de comandos, entonces lea en el commandline parameters.

+0

en su llamada escritura, incluir una línea –

1

Si desea pasar un parámetro de llegar a ella, entonces es obligatorio proporcionar un php-cgi binaria para la invocación:

exec("QUERY_STRING=id=123 php-cgi /var/www/emailer.php"); 

Pero esto podría requerir variables de entorno CGI más falsos. Por lo tanto, a menudo es aconsejable reescribir el guión llamado y dejarlo tomar argumentos de línea de comando normales y leerlos a través del $_SERVER["argv"].

(puede asimismo simplemente falso el comportamiento php-cgi con un intérprete de PHP normal y por encima de ejemplo añadiendo parse_str($_SERVER["QUERY_STRING"], $_GET); en la parte superior de su script.)

1

este script adaptado muestra 2 formas de pasar parámetros a un php scr IPT de un comando php exec: LLAMANDO SCRIPT

<?php 
$fileName = '/var/www/ztest/helloworld.php 12'; 
$options = 'target=13'; 
exec ("/usr/bin/php -f {$fileName} {$options} > /var/www/ztest/log01.txt 2>&1 &"); 

echo "ended the calling script"; 
?> 

LLAMADA SCRIPT

<?php 
echo "argv params: "; 
print_r($argv); 
if ($argv[1]) {echo "got the size right, wilbur! argv element 1: ".$argv[1];} 
?> 

No se olvide de comprobar los permisos de ejecución y para crear un archivo log01.txt con permisos de escritura (el usuario apache por lo general será www-data).

RESULTADO

argv params: Array

(

[0] => /var/www/ztest/helloworld.php 

[1] => 12 

[2] => target=13 

)

tiene el tamaño adecuado, el elemento wilburargv 1: 12

elegir cualquier solución que prefiera para Pasando tus parámetros, todo lo que tienes que hacer es acceder al argv arr ay recuperarlos en el orden en que se pasan (el nombre del archivo es el elemento 0).

TKS @hakre