2009-05-21 37 views
7

¿Cómo puedo ejecutar varios scripts PHP desde otro script PHP, como un archivo por lotes? No creo que la inclusión funcione, si entiendo qué es lo que está haciendo; porque cada uno de los archivos que estoy ejecutando redeclarará algunas de las mismas funciones, etc. Lo que quiero es ejecutar cada nuevo script PHP como si estuviera en una pila nueva y limpia, sin conocimiento de las variables, funciones, etc. vino antes.¿Cómo puedo ejecutar varios scripts PHP desde un script PHP (como un archivo por lotes)?

Actualización: Debería haber mencionado que la secuencia de comandos se ejecuta en Windows, pero no en un servidor web.

Respuesta

10

Puede usar la función exec() para invocar cada script como un comando externo.

Por ejemplo, la secuencia de comandos podría hacer:

<?php 

exec('php -q script1.php'); 
exec('php -q script2.php'); 

?> 

Exec tiene algunos problemas de seguridad que lo rodean, pero parece que podría funcionar para usted.

+1

¿Qué hace -q do? ¿Todavía es relevante? Estaba buscando páginas man y se ejecuta en silencio. Qué significa eso? Suprime la salida o algo así? – Fallenreaper

6

// uso ejecutivo http://www.php.net/manual/en/function.exec.php

<?php 

exec('/usr/local/bin/php somefile1.php'); 
exec('/usr/local/bin/php somefile2.php'); 

?> 

En los viejos tiempos que he hecho algo así como crear un conjunto de marcos que contiene un enlace a cada archivo. Llame al conjunto de marcos y llame a todos los scripts. Usted podría hacer lo mismo con iframes o con ajax en estos días.

3

exec() es una buena función para usar, pero tendrá que esperar hasta la finalización del proceso para continuar con el script primario. Si estás haciendo un lote de procesos en los que cada proceso lleva un poco de tiempo, te sugiero que uses popen().

La variable que obtienes crea un puntero a una tubería que te permite pasar por un puñado de procesos a la vez, almacenarlos en una matriz y luego acceder a todos ellos con la velocidad serial una vez finalizados (mucho más concurrentemente) usando steam_get_contents().

Esto es especialmente útil si está realizando llamadas a la API o ejecutando scripts que pueden no requerir mucha memoria o gran cantidad de cómputo, pero requieren una espera considerable para que se completen.

3

Si necesita resultados de devolución de esos scripts, puede usar la función system.

$result = system('php myscript.php'); 
$otherresult = system('php myotherscript.php'); 
Cuestiones relacionadas