Autor Tema: Problema con función, crea e imprime datos pero no ejecuta php en navegador.  (Leído 3326 veces)

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

deadfrommayhem

  • Mensajes: 6
  • Liked: 0
Saludos vandalos, tengo un problema con un script, como antecedente les dire esto, estoy utilizando un script ya creado por zonaphp es una script para hacer paginas modulares, pero para poder tener los modulos de tu sitio debes ir dando de alta una variable con un array dentro del archivo de configuracion, despues el modulo lo llamas con un enlace especifico, la cuestion es que quiero ponerle una funcion escrita en php que recorre la carpeta donde estan los archivos que seran los modulos, cuando la funcion lee los archivos crea la variable y el array para poder automatizar el proceso.

Hasta ahi todo va bien, ahora el problema es el siguiente, cuando quiero incluir los modulos en el archivo de configuracion aparece el codigo de la variable y el array en pantalla en vez de guardarse como una simple instruccion.

Les dejo los ejemplos a ver si alguien me ayuda a meterle algo de cabeza y buscar una posible solucion.

Este viene a ser el archivo de configuracion, se llama conf.php

Código: [Seleccionar]
<?php
/*
 * Archivo de configuración para nuestra aplicación modularizada.
 * Definimos valores por defecto y datos para cada uno de nuestros módulos.
*/
define('MODULO_DEFECTO', 'home');
define('MODULO_ERROR', 'error');
define('LAYOUT_DEFECTO', 'layout_simple.php');
define('MODULO_PATH', realpath('./modulos/'));
define('LAYOUT_PATH', realpath('./layouts/'));

$conf['home'] = array(
'archivo' => 'home.php',
'layout' => LAYOUT_DEFECTO );
$conf['error'] = array(
'archivo' => 'error.php');
$conf['relatos'] = array(
'archivo' => 'relatos.php');
$conf['libros'] = array(
'archivo' => 'libros.php' );
$conf['descargas'] = array(
'archivo' => 'descargas.php' );
$conf['mirrors'] = array(
'archivo' => 'mirrors.php' );
/*$conf['imp_art'] = array(
'archivo' => $conf['articulo']['archivo'],
'layout' => 'imprimir.php' );
*/
require 'datos.txt';
?>

En la ultima linea esta el require que llama al archivo donde se guarda lo que genera esta funcion, el archivo se llama listar.php

Código: [Seleccionar]
<?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)) {
//echo "<a href='".$ruta."/".$archivo."' title='".$archivo."'>".$archivo."</a>";
$modulos = "\$conf['$nombremod'] = array( 'archivo' => '$ruta/$archivo' ); ";
$file=fopen("datos.txt","a") or die("Problemas");
fputs($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");
?>

Para llamar la funcion usamos la ultima linea del archivo listar.php que es mostrar_modulos("./modulos/prueba");

nos arroja el siguiente resultado, un archivo .txt con el siguiente texto.

Código: [Seleccionar]
$conf['home2'] = array( 'archivo' => './modulos/prueba/home2.php' );
$conf['relatos2'] = array( 'archivo' => './modulos/prueba/relatos2.php' );
$conf['mirrors2'] = array( 'archivo' => './modulos/prueba/mirrors2.php' );
$conf['error2'] = array( 'archivo' => './modulos/prueba/error2.php' );
$conf['descargas2'] = array( 'archivo' => './modulos/prueba/descargas2.php' );

Pero, ahi es donde esta el problema, cuando lo llamo por require o include me muestra el texto tal cual en la pantalla y si intento llamar a alguno de los modulos me manda a la pagina de error, entonces no esta aceptando los datos como configuracion sino como simple texto.

He tratado de cambiar la manera de mostrar los datos, todos con el mismo resultado, o se muestra en pantalla o manda error de array a string.

Ojala alguno de ustedes pueda ayudarme, ya que no encuentro la manera de hacerlo.

les dejo el link del script de zonaphp para que lo pueben en local si gustan.

http://zonaphp.com/creando-webs-modulares/modulares.zip

Hasta pronto.

desu

  • *
  • Mensajes: 32
  • Liked: 9
Re:Problema con función, crea e imprime datos pero no ejecuta php en navegador.
« Respuesta #1 : septiembre 06, 2017, 04:45:48 pm »
No sé si te entendí bien pero quizá sea una de dos, o estás poniendo tus include/require entre <?php ... ?> cuando no deberías, o no lo estás haciendo y tendrías que  ;)

deadfrommayhem

  • Mensajes: 6
  • Liked: 0
Re:Problema con función, crea e imprime datos pero no ejecuta php en navegador.
« Respuesta #2 : septiembre 06, 2017, 11:25:57 pm »
No sé si te entendí bien pero quizá sea una de dos, o estás poniendo tus include/require entre <?php ... ?> cuando no deberías, o no lo estás haciendo y tendrías que  ;)
Lo mismo me dijo alguien mas, pero estoy bloqueado, ya expuse los pasos que he hecho, los pongo tal cual esta en mi codigo, la cuestion es que el string generado es el correcto, pues si comparo la salida con el texto del archivo de configuracion es identico, el problema es que si lo llamo por enclude o require no funciona, ¿conoces alguna otra manera de cargarlo?

desu

  • *
  • Mensajes: 32
  • Liked: 9
Re:Problema con función, crea e imprime datos pero no ejecuta php en navegador.
« Respuesta #3 : septiembre 07, 2017, 04:18:09 am »
Bueno, es que si quieres abrir un archivo de texto necesitas usar fopen('datos.txt','r');  y luego someterlo a un loop con feof para que llegue hasta el final de tu archivo y recuperar dicha salida con fgets, ya de ahí con un echo imprime en tu documento y finaliza con un fclose y así... aunque esto es un poco rebuscado ya que suele usarse como alternativa a una DB.
Quizá sea más simple que en lugar de crear el documento datos.txt tu archivo listar.php genere mejor una salida directamente con tales datos en una función y así ya podrías invocarla con requiere_once/include.

deadfrommayhem

  • Mensajes: 6
  • Liked: 0
Re:Problema con función, crea e imprime datos pero no ejecuta php en navegador.
« Respuesta #4 : septiembre 13, 2017, 10:58:45 am »
Bueno, es que si quieres abrir un archivo de texto necesitas usar fopen('datos.txt','r');  y luego someterlo a un loop con feof para que llegue hasta el final de tu archivo y recuperar dicha salida con fgets, ya de ahí con un echo imprime en tu documento y finaliza con un fclose y así... aunque esto es un poco rebuscado ya que suele usarse como alternativa a una DB.
Quizá sea más simple que en lugar de crear el documento datos.txt tu archivo listar.php genere mejor una salida directamente con tales datos en una función y así ya podrías invocarla con requiere_once/include.
La cuestion es que si pruebas el codigo, la funcion da como salida el texto que necesito, solo que lo muestra como texto en la pagina, no como codigo, esa es la parte en la que estoy atorado.