2012-03-08 10 views
127

Llamo a un script PHP cada vez que se carga una página web. Sin embargo, hay un parámetro que el script PHP necesita para ejecutarse (que normalmente paso a través de la línea de comando cuando estoy probando el script).¿Cómo paso los parámetros a un script PHP a través de una página web?

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

+0

¿Cómo se ejecuta? – zerkms

+1

¿Puedes publicar tu código, por favor? – SenorAmor

+1

por lo que desea ejecutar una línea de comando? o un script php? –

Respuesta

217

Es de suponer que estás pasando los argumentos de la línea de comandos de la siguiente manera:

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

... y luego acceder en el guión de esta manera:

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

Lo que hay que tener al pasar argumentos a través de HTTP (accediendo a la secuencia de comandos en la web) está utilizando la cadena de consulta y acceder a ellos a través de $ _GET superglobal:

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

... y el acceso:

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

Si desea que el script se ejecute independientemente del lugar en el que lo llamó (línea de comandos o desde el navegador) que querrá algo como lo siguiente:

EDIT: como señaló Cthulhu en los comentarios, la forma más directa de probar qué entorno está ejecutando es utilizar 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']; 
} 
?> 
+2

Su última muestra de código arrojará avisos – zerkms

+1

quizás "if (isset ($ _ GET))" – Jason

+0

Usaría 'empty ($ _ GET)'. '$ _GET' es un valor predefinido, por lo que estoy bastante seguro de que siempre está configurado, pero está vacío si no hay parámetros GET configurados. 'empty()' devuelve 'false' para cadenas y matrices vacías. –

15
$argv[0]; // the script name 
$argv[1]; // the first parameter 
$argv[2]; // the second parameter 

Si desea toda la secuencia de comandos para ejecutar independientemente del lugar en el que lo llamó (línea de comandos o desde el navegador) que 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 y el uso chmod 755 /var/www/webroot/index.php

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

Para llamar desde el navegador, use

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2 
Cuestiones relacionadas