Foros del Web » Programando para Internet » PHP »

Ejecutar los .php de un directorio mediante PHP

Estas en el tema de Ejecutar los .php de un directorio mediante PHP en el foro de PHP en Foros del Web. Hola muy buenas, estoy empezando con PHP y estoy ante una duda que les comento: ¿Es posible ejecutar scripts .php desde un php? imagino que ...
  #1 (permalink)  
Antiguo 22/10/2008, 12:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 13 años, 7 meses
Puntos: 0
Ejecutar los .php de un directorio mediante PHP

Hola muy buenas, estoy empezando con PHP y estoy ante una duda que les comento: ¿Es posible ejecutar scripts .php desde un php? imagino que sí, pero no doy con la tecla. He leído algo de cron y curl pero creo que no es lo que necesito. Me explico mejor: Necesito que ejecutando manualmente un php este me ejecute otros tantos, cuyas rutas tiene almacendas en un array. Les muestro un trozo del código:

Código:
foreach($files as $v) {
	$ext = strtolower(array_pop(explode(".",$v)));
	if($ext=="php"){
	//Aquí necesito que me ejecute los $v (que son rutas a archivos .php)
	
	}
$files es un array que contiene rutas con distintas extensiones, este array se llena mediante otro código, pero ahí no hay problema.

Bueno, imagino que será alguna función chorra, pero he probado con exec, fopen, fread...y no consigo lo que quiero.

Espero, puedan ayudarme. Muchas gracias.
  #2 (permalink)  
Antiguo 22/10/2008, 12:57
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 16 años
Puntos: 50
Respuesta: Ejecutar los .php de un directorio mediante PHP

pues segun le entendi lo que yo haria es poner en el for

un include ("ruta_archivo");

y hay le ejecuta todos los archivos

Saludos
  #3 (permalink)  
Antiguo 22/10/2008, 12:57
Avatar de Shippo  
Fecha de Ingreso: agosto-2008
Mensajes: 31
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Quiza tu solucion sea include("ruta/del/script/archivo.php");
  #4 (permalink)  
Antiguo 22/10/2008, 13:08
 
Fecha de Ingreso: octubre-2008
Ubicación: México
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Si, de hecho sí se puede. Pero no estoy seguro de cómo necesitas ejecutarlos porque hay dos formas. Siguiendo tu código:

Código PHP:
    foreach($files as $v) {
        
$ext strtolower(array_pop(explode(".",$v)));
        if(
$ext=="php"){
            
//Aquí necesito que me ejecute los $v (que son rutas a archivos .php)
            
include($v);
        }
    } 
La otra forma es mandando a llamar el ejecutable de PHP y que éste ejecute los scripts.

Salut.
  #5 (permalink)  
Antiguo 22/10/2008, 13:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Muchas gracias a todos. Parece ser esa la solución a la duda planteada. No obstante estoy haciendo pruebas y tendré que cambiar algunas cosas. Ya que esos archivos .php que ejecuta, están en otros directorios, cargan un xml mediante un ruta relativa cada uno de ellos y crean otros xml. Entonces tengo ahora un problema de rutas que trataré de sulucionar. De cualquier modo, muchas gracias. Ya os comentaré, creo que no debe ser un problema mayor este.
  #6 (permalink)  
Antiguo 22/10/2008, 14:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Bueno, me estoy liando un poco. A ver, os comento qué pretendo hacer. Tengo una galería de imágenes que carga las imágenes mediante un XML. Para no tener que escribir el XML para cada galería (carpeta), coloqué dentro de la misma un archivo creaXML.php y un archivo blanco.xml de modo que el php tomara el xml y crease un nuevo xml: negro.xml que contentría algo así

Código:
<?xml version="1.0" encoding="utf-8"?>
<Galeria>		              			
	<Imagenes>
                       <img>galerias/mariano/001.jpg</img>
                       <img>galerias/mariano/002.jpg</img>
                </Imagenes>
</Galeria>
El código de creaXML.php serái el siguiente:

Código:
<?php
//Lista en un xml los archivos .jpg de un directorio.

$Galeria = simplexml_load_file ("blanco.xml"); 
//cargo un archivo xml en $Galeria

$NuevaGalería = $Galeria->addChild('Imagenes'); 
//añado un hijo a la Galería llamado Imágenes

$cadena=getcwd();
//guardo en $cadena la ruta absoluta del directorio actual

$actual = substr ($cadena,36);
//le resto los 36 primeros caracteres para quedarme con la parte que me interesa
//para crear la ruta que necesitaré después

$directorio=opendir('.');//abro el directorio actual
while ($archivo = readdir($directorio))
{
		$ext = strtolower(array_pop(explode(".",$archivo)));
                                //guardo la extensión del actual
		if($ext=="jpg"){//pregunto si es jpg
	
		if (($archivo!='.')and($archivo!='..')){
                                 //no quiero directorios actual ni padre 
                                 //(creo que sobra ya, xq ya han pasados sólo los jpg
			$NuevaGaleria->addChild('img',"$actual/$archivo");
                                                //creo un hijo <img>ruta/archivo.jpg</img>
		
		}
		}
	
			
}
 
//guardo el xml creado en un xml que si está creado será 
//machacadao y si no, creará uno nuevo

$Galeria->asXML("negro.xml"); 

closedir($directorio); //cerramos el directorio
?>
Entonces, hay varias carpetas con imágenes y un php como este y lo que pretendo hacer es que desde otro php, dónde tengo como dije antes un array con las rutas de estos php, poder ejecutar todos los php del array y que hagan lo mismo, tomar un blanco.xml y crear un negro.xml

He probado poniendo a la hora de guardar el xml, lo siguiente:

Código:
$Imagenes->asXML("$actual/negro.xml");
Pero no resulta. Bueno, espero haberme explicado bien y puedan ayudarme.

Última edición por Noja33; 22/10/2008 a las 15:20
  #7 (permalink)  
Antiguo 22/10/2008, 15:39
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Os muestro el mensaje de error que resulta:

Warning: SimpleXMLElement::asXML(/negro.xml) [simplexmlelement.asxml]: failed to open stream: Permission denied in /......galerias/mariano/creaXML.php on line 34

Parece ser que no puede crear ni escribir en un fichero de otro directorio. La línea 34 es esa en la que cambié
Código:
$Galeria->asXML("negro.xml");
por
Código:
$Galeria->asXML("$actual/negro.xml");
Resumiendo, lo que necesito es poder escribir en un archivo de un subdirectorio, o crearlo si no existe(esto de crearlo no me es importante, me es igual tenerlo ya creado). Si no me explico bien, díganmelo por favor. Muchas gracias.
  #8 (permalink)  
Antiguo 22/10/2008, 15:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 16 años
Puntos: 2135
Respuesta: Ejecutar los .php de un directorio mediante PHP

Hola Noja33,

Si ves el error es que no tienes permiso para escribir en el directorio, y si te fijas estas tratando de escribir en /negro.xml (cuando usas / significa la raiz del disco), por eso te tira el error, verifica el valor de $actual antes.

Saludos.
  #9 (permalink)  
Antiguo 22/10/2008, 16:21
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Cita:
Iniciado por GatorV Ver Mensaje
Hola Noja33,

Si ves el error es que no tienes permiso para escribir en el directorio, y si te fijas estas tratando de escribir en /negro.xml (cuando usas / significa la raiz del disco), por eso te tira el error, verifica el valor de $actual antes.

Saludos.
Gracias por tu comentario GatorV.
A ver, en cuanto a los permisos los he puesto lo menos restrictivo posible para probar (777), supongo que debería de estar solventado ese problema. Y luego respecto a la ruta. si ejecuto directamente creaXML.php cambiando
Código:
$Galeria->asXML("$actual/negro.xml");
por
Código:
echo "$actual/negro.xml";
me sale por pantalla
Código:
galerias/mariano/negro.xml
ahora bien, si con este mismo cambio ejecuto el php que estoy tratando de construir me sale por pantalla excatamente
Código:
/negro.xmlgalerias/mariano/nuevoXML.php
Sale así, tal cual, pero diferenciemos dos partes, una negro.xml y otra el resto, es decir la ruta al php que sale xq he puesto en el, llamemosle a parti de ahora, padre.php(el que estoy construyendo) un "echo" de la siguiente manera:
Código:
foreach($files as $v) {
	$ext = strtolower(array_pop(explode(".",$v)));
	if($ext=="php"){
	include($v);
	echo "<b>$v</b><br>" ;
	}
Entonces, puedes aclararme esto?? No se xq sale, en este caso, sólo "/negro.xml" y cuando ejecuto directamente el creaXML.php sale "galerias/mariano/negro.xml"

Gracias.
  #10 (permalink)  
Antiguo 22/10/2008, 19:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 16 años
Puntos: 2135
Respuesta: Ejecutar los .php de un directorio mediante PHP

Mmmm habría que ver donde defines la variable $actual, ya que si te esta imprimiendo esto: /negro.xmlgalerias/mariano/nuevoXML.php, hay un problema al definir la variable.

Saludos.
  #11 (permalink)  
Antiguo 23/10/2008, 07:16
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Bueno, una vez entendido la función include, creo que el problema está en que esta no hace lo que a mi me gustaría que hiciera. Y que esta función toma todo el código del php hijo que llama y lo ejecuta en el padre. Entonces cuando se realiza la siguiente instrucción:
Código:
$cadena=getcwd();
, instrucción del hijo creaXML.php, en $cadena queda guardado la ruta al directorio actual dónde se está ejecutando el php, es decir, la ruta al padre, no la ruta al creaXML.php ejecutado en cada iteración del bucle for each. Entonces, mi pregunta es. ¿No es posible que desde el padre, simplemente ejecute al hijo allá dónde esté, sin abrir niguna página para este hijo, sólo que lo ejecute, pero no que tome su código lo incluya en el código propio y lo ejecute, pues no es lo que quiero. A ver si existe la manera de hacer eso. Si no existe , lo que se me viene ocurriendo es tratar de unir en uno padre e hijo, y hacer que dado un directorio lo recorra recursivamente y para cada directorio encontrado, lo analice, y cree en él un negro.xml con el contenido de los .jpg de ese directorio. Bueno, espero vuestros comentarios.Gracias.
  #12 (permalink)  
Antiguo 23/10/2008, 09:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 16 años
Puntos: 2135
Respuesta: Ejecutar los .php de un directorio mediante PHP

Hola Noja33,

En efecto es como dices, el include incluye el archivo y lo ejecuta en el ambito del primero, es el beneficio de include.

Lo que puedes hacer en ese caso es hacer un request HTTP usando fsockopen o cURL hacia el archivo PHP en el otro directorio, eso hace que se ejecute como si tu lo estaras ejecutando desde el explorador.

Aunque a mi parecer la mejor opción es la segunda que tu mismo propones, el unir los scripts y mejor ir recorriendo las carpetas y creando los archivos.

Saludos.
  #13 (permalink)  
Antiguo 23/10/2008, 15:24
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Bueno, hoy no he tenido tiempo, a ver si mañana me puedo poner y a ver qué puedo hacer. Ya os comentaré. Saludos.
  #14 (permalink)  
Antiguo 24/10/2008, 09:05
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ejecutar los .php de un directorio mediante PHP

Bueno, tras vuestros comentarios e indicaciones he conseguido mi objetivo. Finalmente, he indagado por las dos funciones que me comentabas, y curl me ha dado la solución. Os comento el cambio. Sólo cambia, como era deseado lo que había dentro del bucle, ahora queda así:
Código PHP:
foreach($files as $v) {
    
$ext strtolower(array_pop(explode(".",$v)));
    if(
$ext=="php"){
    
    
//include($v); Ejecutaba $v en el ábito donde se ecuetra este código. No hacía lo desado
    
    
$ch curl_init();
    
    
// Se establece la URL
    
curl_setopt($chCURLOPT_URL,"http://www.eldominio.es/carpeta/$v");
    
    
//Opción para que el resultado devuelto no se imprima directamente en la ventana del navegador
    
curl_setopt($chCURLOPT_RETURNTRANSFER0);

    
// Se obtiene la URL indicada
    
curl_exec($ch);

    
// Se cierra el recurso CURL y se liberan los recursos del sistema
    
curl_close($ch);

    
        }
    

Con esto, el código de creaXML.php no habría que tocarlo, lo ejecutará allí donde esté y creará el xml que esperaba.

Muchísimas gracias por vuestra ayuda. Gracias por guiarme Gatorv.

Saludos.

PD:Bueno, dónde veis carpeta en la url, habría que poner la ruta dónde se encuentra el php padre que ejecutamos, es decir, el que contiene el código que hemos modificado.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:07.