| |||
| 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:
$files es un array que contiene rutas con distintas extensiones, este array se llena mediante otro código, pero ahí no hay problema.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)
}
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. |
| |||
| 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: Salut. |
| |||
| 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. |
| |||
| 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:
El código de creaXML.php serái el siguiente:<?xml version="1.0" encoding="utf-8"?>
<Galeria>
<Imagenes>
<img>galerias/mariano/001.jpg</img>
<img>galerias/mariano/002.jpg</img>
</Imagenes>
</Galeria>
Código:
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<?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
?>
He probado poniendo a la hora de guardar el xml, lo siguiente:
Código:
Pero no resulta. Bueno, espero haberme explicado bien y puedan ayudarme. $Imagenes->asXML("$actual/negro.xml");
Última edición por Noja33; 22/10/2008 a las 16:20 |
| |||
| 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:
por$Galeria->asXML("negro.xml");
Código:
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. $Galeria->asXML("$actual/negro.xml");
|
| |||
| Respuesta: Ejecutar los .php de un directorio mediante PHP Cita: 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:
por $Galeria->asXML("$actual/negro.xml");
Código:
me sale por pantalla echo "$actual/negro.xml";
Código:
ahora bien, si con este mismo cambio ejecuto el php que estoy tratando de construir me sale por pantalla excatamente galerias/mariano/negro.xml
Código:
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: /negro.xmlgalerias/mariano/nuevoXML.php
Código:
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"foreach($files as $v) {
$ext = strtolower(array_pop(explode(".",$v)));
if($ext=="php"){
include($v);
echo "<b>$v</b><br>" ;
}
Gracias. |
| ||||
| 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. |
| |||
| 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:
, 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. $cadena=getcwd(); |
| ||||
| 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. |
| |||
| 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: 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. |