lista - PHP-argumentos de línea de comando en Windows
php cli (11)
Puede usar getopt ();
Mira esto::
http://sharingphp.blogspot.com/2011/04/php-cli-script-and-command-line.html
Estoy tratando de ejecutar PHP desde la línea de comandos en Windows XP.
Eso funciona, excepto por el hecho de que no puedo proporcionar parámetros a mi script PHP.
Mi caso de prueba:
echo "param = ".$param."/n";
var_dump($argv);
Quiero llamar esto como:
php.exe -f test.php -- param=test
Pero nunca consigo que el script acepte mi parámetro.
El resultado que obtengo del script anterior
`Aviso de PHP: variable no definida: param en C: / test.php en la línea 2
param = ''''
array(2) {
[0]=> string(8) "test.php"
[1]=> string(10) "param=test"
}
Estoy intentando esto usando PHP 5.2.6. ¿Es esto un error en PHP5?
El paso de parámetros se maneja en la ayuda en línea. Note: If you need to pass arguments to your scripts you need to pass -- as the first argument when using the -f switch.
Esto parecía estar funcionando bajo PHP4, pero no bajo PHP5. Bajo PHP4 podría usar el mismo script que podría ejecutarse en el servidor sin alteración en la línea de comando. Esto es útil para la depuración local, por ejemplo, guardando la salida en un archivo para ser estudiado.
El paso de parámetros se maneja en la ayuda en línea. Nota: si necesita pasar argumentos a sus scripts, debe pasar, como primer argumento cuando usa el modificador -f. Esto parecía estar funcionando bajo PHP4, pero no bajo PHP5.
Pero PHP aún no analiza esos argumentos. Simplemente los pasa al script en la matriz $ argv.
La única razón de esto es que PHP puede decir qué argumentos están destinados para el ejecutable de PHP y qué argumentos están destinados a su secuencia de comandos.
Eso te permite hacer cosas como esta:
php -e -n -f myScript.php -- -f -n -e
(El -f, -n, y -e después del - se pasan a myScript.php. Los anteriores se pasan a PHP).
$ argv es una matriz que contiene todos los parámetros de su línea de comandos ... Necesita analizar esa matriz y configurar $ param usted mismo.
$tmp = $argv[1]; // $tmp="param=test"
$tmp = explode("=", $tmp); // $tmp=Array( 0 => param, 1 => test)
$param = $tmp[1]; // $param = "test";
¿Por qué tiene alguna expectativa de que param se establecerá en el valor? Usted es responsable de analizar la línea de comandos de la manera que desee, desde la matriz $ argv.
PHP no parametriza tus parámetros de línea de comando por ti. Vea la salida donde su 2da entrada en ARGV es "param = prueba".
Lo que probablemente desee es usar el paquete PEAR http://pear.php.net/package/Console_CommandLine : "Un analizador de opciones y argumentos de línea de comando con todas las funciones".
O puede ser masoquista y agregar código para revisar su ARGV y establecer los parámetros usted mismo. Aquí hay un fragmento muy simplista para comenzar (esto no funcionará si la primera parte no es un nombre de variable válido o si hay más de 1 ''='' en una parte ARGV:
foreach($argv as $v) {
if(false !== strpos($v, ''='')) {
$parts = explode(''='', $v);
${$parts[0]} = $parts[1];
}
}
Podrías usar algo como
if (isset($argv[1]) {
$arg1 = $argv[1];
$arg1 = explode("=", $arg1);
$param = $arg1[1];
}
(cómo manejar la falta de parámetros depende de usted) o si necesita un escenario más complejo, busque en una biblioteca de analizador de línea de comandos como la de Pear .
usando ${$parts[0]} = $parts[1];
publicado en otra solución le permite anular cualquier variable en su código, lo que realmente no suena seguro .
Puedes hacer algo como:
if($argc > 1){
if($argv[1] == ''param=test''){
$param = ''test'';
}
}
Por supuesto, puede obtener mucho más complicado que eso según sea necesario.
puedes usar la matriz $ argv. Me gusta esto:
<?php
echo $argv[1];
?>
recuerde que el primer miembro de la matriz $ argv (que es $ argv [0]) es el nombre del script en sí, de modo que para usar los parámetros de la aplicación, debe comenzar a usar miembros de $ argv [] de el ''1 ° índice. al llamar a la aplicación, use esta sintaxis:
php myscript.php -- myValue
no hay necesidad de poner un nombre para el parámetro. como viste, lo que llamaste var_dump () en $ argv [], el segundo miembro (que es el primer parámetro) fue la cadena PARAM = TEST. ¿derecho? así que no hay necesidad de ponerle un nombre al param. solo ingrese el valor de param.
Si le gusta vivir a la vanguardia, PHP 5.3 tiene el comando getOpt () que se encargará de todo este asunto desordenado para usted. Algo.
Si desea pasar los parámetros similares a GET vars, entonces puede usar la función parse_str () . Algo similar a esto:
<?php
parse_str($argv[1]);
?>
Produciría una variable de $ test con un valor de myValue.
¡Espero que esto ayude!
Ejemplo de línea de comando:
php myserver.php host = 192.168.1.4 puerto = 9000
en myserver.php usa las siguientes líneas:
<?php
parse_str(implode(''&'', array_slice($argv, 1)), $_GET);
// Read Arguments
if (array_key_exists(''host'',$_GET))
{
$host = $_GET[''host''];
}
if (array_key_exists(''port'',$_GET))
{
$port = $_GET[''port''];
}
?>