Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: deadfrommayhem en 30 Julio 2017, 00:10 am



Título: [Solucionado]Problema con función, crea e imprime datos pero no ejecuta.
Publicado por: deadfrommayhem en 30 Julio 2017, 00:10 am
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
  1. function mostrar_modulos($ruta){
  2.  
  3. // Se comprueba que realmente sea la ruta de un directorio
  4. if (is_dir($ruta)){
  5. // Abre un gestor de directorios para la ruta indicada
  6. $gestor = opendir($ruta);
  7. // Recorre todos los archivos del directorio
  8. while (($archivo = readdir($gestor)) !== false)  {
  9. // Solo buscamos archivos sin entrar en subdirectorios
  10. $nombremod = substr("$archivo", 0, -4);
  11. if (is_file($ruta."/".$archivo)) {
  12. //echo "<a href='".$ruta."/".$archivo."' title='".$archivo."'>".$archivo."</a>";
  13. $modulos = "\$conf['$nombremod'] = array( 'archivo' => '$archivo' );<br/>";
  14. print "$modulos";
  15. }
  16.  
  17. }
  18. // Cierra el gestor de directorios
  19. closedir($gestor);
  20. } else {
  21. echo "No es una ruta de directorio valida<br/>";
  22. }
  23. }
  24.  

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

Código
  1. $conf['error'] = array( 'archivo' => 'error.php');
  2.  

La funcion se llama de esta manera

Código
  1. mostrar_modulos("./modulos/prueba/");
  2.  

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

Código
  1. <?php
  2. $conf['test1'] = array( 'archivo' => 'test1.php' );<br/>
  3. $conf['test2'] = array( 'archivo' => 'test2.php' );<br/>
  4. $conf['test3'] = array( 'archivo' => 'test3.php' );<br/>
  5. $conf['test4'] = array( 'archivo' => 'test4.php' );<br/>
  6. $conf['test5'] = array( 'archivo' => 'test5.php' );<br/>
  7. $conf['test6'] = array( 'archivo' => 'test6.php' );<br/>
  8. ?>
  9.  

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/ (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
Código:
<?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, -3, SEEK_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");
?>



Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: engel lex en 30 Julio 2017, 00:18 am
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...


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: deadfrommayhem en 30 Julio 2017, 00:33 am
Aca estan las capturas, la cuestion de esto es aprender un poco no reinventar la rueda  ;D
(https://preview.ibb.co/g9K7H5/captura1.png) (https://ibb.co/nwXSH5)
Esta es cuando doy ctrl+u y muestra el codigo fuente.
(https://image.ibb.co/n3dCjk/captura2.png) (https://imgbb.com/)
El codigo fuente de la funcion
(https://image.ibb.co/eiU7H5/captura3.png) (https://imgbb.com/)
Lo que muestra el navegador cuando se llama a la funcion
url de imagen (https://es.imgbb.com/)


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: engel lex en 30 Julio 2017, 00:41 am
eso parece a que estás incluyendo sin abrir la etiqueta <?php o cerrandola donde no debes


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: deadfrommayhem en 30 Julio 2017, 00:45 am
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?


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: engel lex en 30 Julio 2017, 00:48 am
ahora si lo vi! lo que estás haciendo es creando pero como string...

incluso lo formaste como html

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

creo que lo que quieres es

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

y luego haces lo que tengas que hacer con los modulos cargados


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: deadfrommayhem en 30 Julio 2017, 00:56 am
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
  1. $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 (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: engel lex en 30 Julio 2017, 01:03 am
fijate el codigo (lo había corregido sin el echo)

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



que quieres hacer exactamente con eso? que se muestre el contenido de los archivos o que se carguen las rutas a la variable $modulos?


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: deadfrommayhem en 30 Julio 2017, 04:00 am
fijate el codigo (lo había corregido sin el echo)

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



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.


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: engel lex en 30 Julio 2017, 04:05 am
allí está entonces ya el modulo cargado... lo que tienes que mostrar en un echo es el nombre del modulo


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: deadfrommayhem en 30 Julio 2017, 04:17 am
allí está entonces ya el modulo cargado... lo que tienes que mostrar en un echo es el nombre del modulo
No, la cuestion es que se muestra en pantalla la informacion, eso es lo que no quiero.

Ya me las arreglare, por hoy ya lo dejare, gracias man.


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: deadfrommayhem en 5 Agosto 2017, 06:48 am
fijate el codigo (lo había corregido sin el echo)

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



que quieres hacer exactamente con eso? que se muestre el contenido de los archivos o que se carguen las rutas a la variable $modulos?

Tengo una idea, pero no se como implementarla, con la funcion parse_str, no se si me puedas ayudar con eso, ya que no se bien como pasar los datos a esa funcion.


Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: engel lex en 5 Agosto 2017, 07:08 am
yo aún sigo sin entender que quieres XD

si es que quieres que todos los modulos en esa ruta se incluyan (include), si es que quieres que se imprima el contenido (read) o si es que que...



Título: Re: Problema con función, crea e imprime datos pero no ejecuta php en navegador.
Publicado por: deadfrommayhem en 6 Agosto 2017, 00:07 am
yo aún sigo sin entender que quieres XD

si es que quieres que todos los modulos en esa ruta se incluyan (include), si es que quieres que se imprima el contenido (read) o si es que que...


Lo que quiero es que los arrays formados por la funcion pasen a ser una variable llamada $conf, pero que no se muestren en pantalla esos datos, sino que otra parte del script los recoja y si quiero llamar a un modulo de ese array cargue...

Este es el archivo de configuracion, donde estan los parametros de los modulos, lo que busco es que la funcion creada escanee un directorio especifico, donde iran los modulos y haga el array como el de abajo, pero que no muestre el texto como tal en pantalla, sino que lo pase como datos, para ser interpretados aca mas adelante, ¿me explico?
Código
  1. <?php
  2. /*
  3.  * Archivo de configuración para nuestra aplicación modularizada.
  4.  * Definimos valores por defecto y datos para cada uno de nuestros módulos.
  5. */
  6. define('MODULO_DEFECTO', 'home');
  7. define('LAYOUT_DEFECTO', 'layout_simple.php');
  8. define('MODULO_PATH', realpath('./modulos/'));
  9. define('LAYOUT_PATH', realpath('./layouts/'));
  10.  
  11. $conf['home'] = array(
  12. 'archivo' => 'home.php',
  13. 'layout' => LAYOUT_DEFECTO );
  14. $conf['articulo'] = array(  //este es el array a crear con la funcion
  15. 'archivo' => 'art.php' ); //pero no debe imprimirse en pantalla
  16. $conf['imp_art'] = array(
  17. 'archivo' => $conf['articulo']['archivo'],
  18. 'layout' => 'imprimir.php' );
  19.  
  20. ?>
  21.  

Por eso esta funcion escanea el directorio y luego imprime en pantalla $conf['home'] = array(       'archivo' => 'home.php', 'layout' => LAYOUT_DEFECTO ); nuevamente, NO quiero que lo imprima en pantalla, sino que sea recogido como una variable para ser llamada con un enlace, los enlaces son del tipo ?mod=nombredelmodulo

¿Se entiende?

Lo que busco es no tener que ir agregando uno a uno los modulos al archivo de configuracion.