2011-07-20 16 views
31

necesito para ejecutar un archivo PHP con los parámetros a través de la cáscara.Shell correr/ejecutar script PHP con los parámetros

aquí es cómo iba a ejecutar el archivo PHP:

php -q htdocs/archivo.php

Necesito tener el parámetro 'show' y pasar a través de

php -q htdocs/archivo.php? = espectáculo SHOW_NAME

no funciona

Si alguien puede explicar a mí qué mandato debe ejecutar para obtener el archivo php para ejecutar con parámetros establecidos, que sería muy apreciada. Si no, intenta guiarme en la dirección correcta.

+0

Una respuesta mejor que la aceptada: utilice el ejecutable "php-cgi" en lugar de "php". Ver: http://stackoverflow.com/a/11965479/543738 –

Respuesta

35

Test.php:

<?php 
print_r($argv); 
?> 

Shell:

$ php -q test.php foo bar 
Array 
(
    [0] => test.php 
    [1] => foo 
    [2] => bar 
) 
+1

Ok, entonces no puedo recibir los parámetros a través de $ _GET en php pero a través de $ argv, gracias. Me tomó un tiempo darme cuenta de eso. –

3

Debe leer los parámetros de línea de comandos desde $argc y $argv.

El uso de un signo de interrogación es algo que se hace en una dirección URL y no tiene nada que ver con la ejecución de PHP desde una línea de comandos.

Consulte también: http://www.sitepoint.com/php-command-line-1/

2

Además de las otras respuestas (que son bastante correcto), también puede pasar argumentos como parámetros del entorno, así:

FOO=42 BAR=quux php test.php 

A continuación, estará disponible en el superglobal $_ENV.

+0

cuando ingreso ese comando me sale un error para el "FOO". Estoy usando el comando de shell de xampp en Windows, ¿eso cambia algo? –

+0

Probablemente no funcione en Windows, pero funcionará bien en la mayoría de los shells de tipo Unix. – troelskn

+0

Lo hice funcionar, esperaba que fuera recibido por la función $ _GET [] de PHP. Me tomó un tiempo darme cuenta de que $ arvg contenía todos los parámetros. Gracias. –

0

Si está utilizando desde un archivo PHP, puede utilizar popen() y hacer algo como esto:

$part = $show_name; //or whatever you want with spaces 

$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r"); 

Esto utiliza la función escapeshellarg() con el fin de ajustar la variable $part entre comillas (y escape cualquier comilla dentro de él), de modo que pueda usarse como argumento de shell de forma segura.

5

Si usted tiene servidor web (no sólo intérprete acaba de php instalado, pero LAMP/FUR/etc) - sólo tratar este

wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1 

donde:

  • «-O -» - (Carta "O", no cero!) Redirigir "html descargados" por la salida estándar
  • «>/dev/null 2> & 1» - redirigir la salida estándar & salida stderr a ninguna parte
  • «q» - tranquila wget plazo
  • «-t 1 »- sólo intenta conectar (no como predeterminado 20)

En PHP de "ejecutivo" que va a ser algo bajo la siguiente manera:

function exec_local_url($url) { 
    exec('/usr/bin/wget -O - -q -t 1 "http://'. $_SERVER['HTTP_HOST'] .'/' 
    . addslashes($url) . '" >/dev/null 2>&1' 
); 
} 

// ... 

exec_local_url("file.php?show=show_name"); 
exec_local_url("myframework/seo-readable/show/show_name"); 

Por lo tanto, no necesita cambiar sus scripts para manejar argc/argv, y puede usar $ _GET como lo hace normalmente.

Si desea que los trabajos se ejecuten en segundo plano, vea por ej. Unix/Windows, Setup background process? from php code

Uso el enfoque con wget en mis tareas cron; Espero eso ayude.

+0

¿Hay alguna diferencia entre usar los comandos 'wget' y' php' cuando se ejecutan trabajos con 'exec' con respecto a la seguridad o el rendimiento? – Gixty

+0

Estoy seguro de que la seguridad es la misma. Rendimiento - por supuesto 'wget' será más lento pero muy útil a partir de dicha superior. Con wget, la solicitud pasa por todas las etapas ocultas o solicita manejo como apache/nginx/lighttpd caches, reescribe, etc. Cuando está en llamada directa de 'php', culpará a una solución tan compleja, es decir, no es aplicable en todos los casos. De todos modos, creo que solo debes tomar tu caso actual, tu cerebro, tu herramienta de evaluación comparativa y simplemente barajarla. ;) – FlameStorm