¿Cómo paso parámetros a un script PHP a través de una página web?


Estoy llamando a un script PHP cada vez que se carga una página web. Sin embargo, hay un parámetro que el script PHP necesita ejecutar (que normalmente paso a través de la línea de comandos cuando estoy probando el script).

¿Cómo puedo pasar este argumento cada vez que se ejecuta el script cuando se carga la página?

Author: Erick Robertson, 2012-03-08

2 answers

Presumiblemente estás pasando los argumentos en la línea de comandos de la siguiente manera:

php /path/to/wwwpublic/path/to/script.php arg1 arg2

... y luego acceder a ellos en el script de esta manera:

<?php
// $argv[0] is '/path/to/wwwpublic/path/to/script.php'
$argument1 = $argv[1];
$argument2 = $argv[2];
?>

Lo que debe hacer al pasar argumentos a través de HTTP (accediendo al script a través de la web) es usar la cadena de consulta y acceder a ellos a través del super _GET superglobal:

Ir a http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2

... y acceso:

<?php
$argument1 = $_GET['argument1'];
$argument2 = $_GET['argument2'];
?>

Si quieres el script a ejecutar sin importar desde dónde lo llame (línea de comandos o desde el navegador) querrá algo como lo siguiente:

EDIT: como señaló Cthulhu en los comentarios, la forma más directa de probar en qué entorno se está ejecutando es usar la constante PHP_SAPI. He actualizado el código en consecuencia:

<?php
if (PHP_SAPI === 'cli') {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
else {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
}
?>
 219
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-12 14:22:51
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

Si desea que todo el script se ejecute sin importar desde dónde lo llame (línea de comandos o desde el navegador), querrá algo como lo siguiente:

<?php
if ($_GET) {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
} else {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
?>

Para llamar desde la línea de comandos chmod 755 /var/www/webroot/index.php y usar

/usr/bin/php /var/www/webroot/index.php arg1 arg2

Para llamar desde el navegador, utilice

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
 15
Author: Ap.Muthu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-24 04:36:00