2012-04-22 37 views

Respuesta

10

Tenga en cuenta que ejecutar PHP desde el shell es completamente diferente de ejecutarlo en un entorno de servidor web. Si no ha realizado la programación de la línea de comandos antes, puede encontrarse con algunas sorpresas.

Dicho esto, la manera habitual de pasar información a un comando es poniéndola en la línea de comando. Si hace esto:

php /my/directory/file.php "some value" "some other value" 

Luego dentro del guión, $argv[1] se establecerá en "some value" y $argv[2] se establecerá en "some other value". ($argv[0] se establecerá en "/my/directory/file.php").

+0

Lo intenté, no funcionó. ¿Tengo que poner el segundo argumento entre citas para poder leerlo allí? porque no usé citas en el comando. –

+0

¿Está tu PHP creado para la línea de comandos? Es un SAPI diferente y requiere un binario PHP diferente del que usa para CGI. –

+0

Uso el comando shell_exec ("comando"); para crear crontabs –

6

Cuando ejecuta un script PHP desde la línea de comandos, puede acceder al conteo de variables desde $argc y los valores reales en el conjunto . Un simple ejemplo.

Considere prueba.php

<?php 
printf("%d arguments given:\n", $argc); 
print_r($argv); 

La ejecución de esta usando php test.php a b c:

4 arguments given: 
Array 
(
    [0] => test.php 
    [1] => a 
    [2] => b 
    [3] => c 
) 
+0

+1 para su explicación. –

0

N cualquiera de los métodos anteriores funcionó para mí. Ejecuto cron en el servidor compartido de mi hoster. La tarea cron se crea con la interfaz tipo cPanel. La línea de comandos llama a PHP pasando el nombre del script y un par de argumentos.

Esa es la forma en la línea de comandos de cron se ve:

php7.2 /server/path/to/my/script/my-script.php "test.tst" "folder=0"

Ninguna de las respuestas anteriores con trabajaron para mi caso.

El problema fue que nadie le dijo que tenía que declarar como global antes de obtener el acceso a los argumentos CLI. Esto tampoco se menciona en el manual oficial de PHP.

Bueno, probablemente uno tenga que declarar ony global para que los scripts se ejecuten con el servidor. Tal vez en un entorno local ejecutar script en CLI no requiere ser declarado global. Cuando lo pruebo, publico aquí.

Pero nevertherless para mi caso la configuración de trabajo es:

global $argv; 
echo "argv0: $argv[0]\n\r"; // echoes: argv0: /server/path/to/my/script/my-script.php 
echo "argv1: $argv[1]\n\r"; // echoes: argv1: test.tst 
echo "argv2: $argv[2]\n\r"; // echoes: argv2: folder=0 

Me dieron los mismos resultados con $_SERVER['argv'] gama superglobal. Uno puede hacer uso de ella de esta manera:

$myargv = $_SERVER['argv']; 
echo $myargv[1]; // echoes: test.tst 

la esperanza de que ayude a alguien.