Por lo general, para pasar argumentos a un script de línea de comando, usará una argv
variable global o getopt :
// bash command:
// php -e myscript.php hello
echo $argv[1]; // prints hello
// bash command:
// php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // prints world
$ _GET se refiere a los parámetros del método HTTP GET, que no están disponibles en la línea de comandos, ya que requieren un servidor web para rellenar.
Si realmente desea completar $ _GET de todos modos, puede hacer esto:
// bash command:
// export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* outputs:
Array(
[var] => value
[arg] => value
)
*/
También puede ejecutar un script dado, completar $_GET
desde la línea de comando, sin tener que modificar dicho script:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
Tenga en cuenta que puede hacer lo mismo con $_POST
y $_COOKIE
también.
php [script name] "a=1&b=2&c=3"
no se completarán$_SERVER['QUERY_STRING']
, pero puede afectar fácilmente lo mismo haciendo referencia$_SERVER['argv'][1]
.getopt()
, aparentemente esto le dice a PHP que quieres el argumentof
, no la opciónf
(que se especificaría menos los dos puntos). Entonces es solo sintaxis.De esta respuesta en ServerFault :
Use el
php-cgi
binario en lugar de solophp
, y pase los argumentos en la línea de comando, así:Lo que pone esto en
$_GET
:También puede establecer variables de entorno que establecería el servidor web, de esta manera:
fuente
<b>Notice</b>: Undefined index: testing in <b> ... </b><br />
php-cgi -f /var/www/vhosts/example.com/public_html/index.php action=DoSomething
funciona bien ..No tengo un binario php-cgi en Ubuntu, así que hice esto:
fuente
A veces no tiene la opción de editar el archivo php para establecer $ _GET a los parámetros pasados, y a veces no puede o no desea instalar php-cgi.
Encontré que esta es la mejor solución para ese caso:
Esto evita alterar su archivo php y le permite usar el comando php simple. Si tiene instalado php-cgi, utilícelo, pero esta es la mejor opción. Pensé que estas opciones eran dignas de mención
el -r significa ejecutar el código php en la siguiente cadena. configura el valor $ _GET manualmente allí y luego hace referencia al archivo que desea ejecutar.
Vale la pena señalar que debe ejecutar esto en la carpeta correcta, a menudo, pero no siempre, la carpeta en la que se encuentra el archivo php. Requiere que las declaraciones usen la ubicación de su comando para resolver las URL relativas, NO la ubicación del archivo
fuente
Luego, configure sus
$_GET
variables en su primera línea en PHP, aunque esta no es la forma deseada de establecer una$_GET
variable y puede experimentar problemas dependiendo de lo que haga más adelante con esa variable.las variables con las que inicie el script serán accesibles desde la
$argv
matriz en su aplicación PHP. la primera entrada será el nombre de la secuencia de comandos de la que provienen, por lo que es posible que deseesarray_shift($argv)
eliminar esa primera entrada si deseas procesar un montón de variables. O simplemente cargar en una variable local.fuente
Intenta usar
WGET
:fuente
$_GET
implica un servidor web en ejecución.- Opción 1: php-cgi -
Use 'php-cgi' en lugar de 'php' para ejecutar su script. Esta es la forma más sencilla, ya que no necesitará modificar especialmente su código php para trabajar con él:
- Opción 2: si tiene un servidor web -
Si el archivo php está en un servidor web, puede usar 'wget' en la línea de comando:
O:
- Accediendo a las variables en php -
En ambas opciones 1 y 2, accede a estos parámetros de esta manera:
fuente
Si tiene que pasar
$_GET
,$_REQUEST
,$_POST
, o cualquier otra cosa que usted puede también utilizar el modo interactivo PHP:Luego escriba:
Esto establecerá manualmente las variables que desee y luego ejecutará su archivo php con esas variables establecidas.
fuente
Si tiene la posibilidad de editar el script PHP, puede poblar artificialmente la matriz $ _GET utilizando el siguiente código al comienzo del script y luego llamar al script con la sintaxis:
php -f script.php name1=value1 name2=value2
fuente
En la línea de comando pegue lo siguiente
fuente
Solo los paso así:
funciona bien, la matriz $ _GET es:
fuente
php -r 'parse_str($argv[2],$_GET);include $argv[1];' index.php 'a=1&b=2'
Podrías hacer la primera parte como un alias:
alias php-get='php -r '\''parse_str($argv[2],$_GET);include $argv[1];'\'
entonces simplemente use:
php-get some_script.php 'a=1&b=2&c=3'
fuente
o simplemente (si tienes LYNX):
fuente