[Solucionado]Problema con función, crea e imprime datos pero no ejecuta.

Iniciado por deadfrommayhem, 30 Julio 2017, 00:10 AM

0 Miembros y 1 Visitante están viendo este tema.

deadfrommayhem

La solucion sera usar un txt para guardar la informacion generada y de ahi llamar los modulos.

Saludos a todos, estoy intentando hacer un script que liste algunos archivos que esten dentro de alguna ruta especificada al llamar la funcion y que muestren un instruccion para asi llamar paginas dentro de una pagina, a manera de modulos.

El problema es el siguiente, tengo la funcion hecha pero por algun motivo ejecuta las ordenes y genera los datos que quiero incluir en un archivo, pero al llamar la funcion el texto generado no se mantiene como codigo sino se muestra en el navegador como texto plano.

Esta es la funcion
Código (php) [Seleccionar]

function mostrar_modulos($ruta){

// Se comprueba que realmente sea la ruta de un directorio
if (is_dir($ruta)){
// Abre un gestor de directorios para la ruta indicada
$gestor = opendir($ruta);
// Recorre todos los archivos del directorio
while (($archivo = readdir($gestor)) !== false)  {
// Solo buscamos archivos sin entrar en subdirectorios
$nombremod = substr("$archivo", 0, -4);
if (is_file($ruta."/".$archivo)) {
//echo "<a href='".$ruta."/".$archivo."' title='".$archivo."'>".$archivo."</a>";
$modulos = "\$conf['$nombremod'] = array( 'archivo' => '$archivo' );<br/>";
print "$modulos";
}

}
// Cierra el gestor de directorios
closedir($gestor);
} else {
echo "No es una ruta de directorio valida<br/>";
}
}


Genera esta linea de codigo por cada archivo encontrado dentro del directorio indicado

Código (php) [Seleccionar]

$conf['error'] = array( 'archivo' => 'error.php');


La funcion se llama de esta manera

Código (php) [Seleccionar]

mostrar_modulos("./modulos/prueba/");


Pero en el navegador imprime el bloque de php de esta manera

Código (php) [Seleccionar]

<?php
$conf
['test1'] = array( 'archivo' => 'test1.php' );<br/>
$conf['test2'] = array( 'archivo' => 'test2.php' );<br/>
$conf['test3'] = array( 'archivo' => 'test3.php' );<br/>
$conf['test4'] = array( 'archivo' => 'test4.php' );<br/>
$conf['test5'] = array( 'archivo' => 'test5.php' );<br/>
$conf['test6'] = array( 'archivo' => 'test6.php' );<br/>
?>



En ves de ejecutar el codigo.
Cabe decir que lo que quiero es automatizar un poco el sistema creado en zonaphp http://zonaphp.com/creando-webs-modulares/.

La cuestion es llamar la funcion dentro del archivo conf para crear la variable con su respectivo array y despues solo llamar el modulo con el enlace, agradeceria alguna orientacion para poder hacer que los datos se queden como codigo y sean ejecutados por el navegador en vez de mostrar el bloque de codigo fuente tal cual.

Gracias.

SI A ALGUIEN LE INTERESA ESTA FUE LA SOLUCION

<?php
function mostrar_modulos($ruta){
// Se comprueba que realmente sea la ruta de un directorio
if (is_dir($ruta)){
// Abre un gestor de directorios para la ruta indicada
$gestor opendir($ruta);
// Recorre todos los archivos del directorio
while (($archivo readdir($gestor)) !== false)  {
// Solo buscamos archivos sin entrar en subdirectorios
$nombremod substr("$archivo"0, -4);
if (is_file($ruta."/".$archivo)) {
$rutacorrecta substr("$ruta"9);
//echo "<a href='".$ruta."/".$archivo."' title='".$archivo."'>".$archivo."</a>";
$modulos "\$conf['$nombremod'] = array( 'archivo' => '$rutacorrecta/$archivo' );";
$file=fopen("conf.php","r+") or die("Problemas");
fseek($file, -3SEEK_END);
fwrite($file,"$modulos;?>
");//escribir el contenido para incluir en conf.php desde txt
fclose($file);

}

}
// Cierra el gestor de directorios
closedir($gestor);
} else {
echo "No es una ruta de directorio valida<br/>";
}
}
mostrar_modulos("./modulos/prueba");
?>


engel lex

no terminé de entender, muestra una captura de tu navegador a ver como queda...

por otro lado para crear webs modulares no cargas a lo loco :s

por ultimo, para crear webs modulares crear tu propio sistema es bueno para aprender, pero no es util reinverntar el agua tibia... para eso hay sistemas bastante bien armados y maduros ya como son los MVC

yo uso codeigniter, pero está por ejemplo cakePHP, zend, etc...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

deadfrommayhem

Aca estan las capturas, la cuestion de esto es aprender un poco no reinventar la rueda  ;D

Esta es cuando doy ctrl+u y muestra el codigo fuente.

El codigo fuente de la funcion

Lo que muestra el navegador cuando se llama a la funcion
url de imagen

engel lex

eso parece a que estás incluyendo sin abrir la etiqueta <?php o cerrandola donde no debes
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

deadfrommayhem

Si lees el código de la función, específicamente crea las etiquetas php, pero no ejecuta el código, sino que lo presenta como en la primer imagen, la cuestión solo es que lo que quiero es que ese código se ejecute en vez de presentarse en el html de la pagina como texto.

He intentado cambiar algunas cosas en donde se genera la variable módulos, pero sin conseguir éxito, ¿algún consejo?

engel lex

ahora si lo vi! lo que estás haciendo es creando pero como string...

incluso lo formaste como html

Código (php) [Seleccionar]
if (is_file($ruta."/".$archivo)) {
//echo "<a href='".$ruta."/".$archivo."' title='".$archivo."'>".$archivo."</a>";
$modulos = "\$conf['$nombremod'] = array( 'archivo' => '$archivo' );<br/>";
print "$modulos";
}


creo que lo que quieres es

Código (php) [Seleccionar]
if (is_file($ruta."/".$archivo)) {
$modulos = $conf[$nombremod] = array( 'archivo' => $archivo );
}


y luego haces lo que tengas que hacer con los modulos cargados
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

deadfrommayhem

Mismo error que habia enfrentado anteriormente

Array
Notice: Array to string conversion in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
Array
Notice: Array to string conversion in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
Array
Notice: Array to string conversion in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
Array
Notice: Array to string conversion in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
Array
Notice: Array to string conversion in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
Array?>
Con esta linea modificada de esta manera
Código (php) [Seleccionar]
$modulos = '$conf['.$nombremod.'] = array( '.archivo.' => '.$archivo.' );<br/>';
Da estos errores...

Notice: Use of undefined constant archivo - assumed 'archivo' in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
$conf[test2] = array( archivo => test2.php );

Notice: Use of undefined constant archivo - assumed 'archivo' in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
$conf[test3] = array( archivo => test3.php );

Notice: Use of undefined constant archivo - assumed 'archivo' in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
$conf[test4] = array( archivo => test4.php );

Notice: Use of undefined constant archivo - assumed 'archivo' in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79
$conf[test5] = array( archivo => test5.php );

Notice: Use of undefined constant archivo - assumed 'archivo' in C:\xampp\htdocs\sickertk\mostrar_archivos.php on line 79

Siento que ando cerca :D


· No haga doble post, usa el boton modificar
>aquí las reglas del foro
-Engel Lex

engel lex

fijate el codigo (lo había corregido sin el echo)

Código (php) [Seleccionar]
if (is_file($ruta."/".$archivo)) {
$modulos = $conf[$nombremod] = array( 'archivo' => $archivo );
}




que quieres hacer exactamente con eso? que se muestre el contenido de los archivos o que se carguen las rutas a la variable $modulos?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

deadfrommayhem

Cita de: engel lex en 30 Julio 2017, 01:03 AM
fijate el codigo (lo había corregido sin el echo)

Código (php) [Seleccionar]
if (is_file($ruta."/".$archivo)) {
$modulos = $conf[$nombremod] = array( 'archivo' => $archivo );
}




que quieres hacer exactamente con eso? que se muestre el contenido de los archivos o que se carguen las rutas a la variable $modulos?
Especificamente lo que deseo hacer es que cuando la funcion arroje sus datos el codigo php se ejecute, de manera que cuando quiera llamar el modulo solo tenga que dar click en el enlace que lleva este formato. ?mod=nobredemodulo. al tener ya el modulo con nombre y archivo ya se cual modulo debo llamar y como hacerlo.

No se si me explico.

engel lex

allí está entonces ya el modulo cargado... lo que tienes que mostrar en un echo es el nombre del modulo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.