PHP - Cómo automodificar un .php ejecutando un script perl sobre un template

   
Vista:
Imágen de perfil de Ramiro

Cómo automodificar un .php ejecutando un script perl sobre un template

Publicado por Ramiro rmorenochiral@gmail.com (3 intervenciones) el 01/12/2013 12:08:52
En una web (en linux) de meteorología que voy mejorando uso un .php con datos de una SQLite que inicialmente se crea mediante un perl que interpreta un template que hace todo el trabajo pesado con la DB. Así se consigue que todos los datos diarios del día actual sean claramente visibles en la web.
Pero estoy intentando permitir al usuario la elección del día que quiera ver. El .php recibe la fecha (un input type="date" de HTML5) y lo que quiero es usar el mismo procedimiento: llamar al perl que actúa sobre el template con la nueva fecha. Que debería recrear el php y visualizarlo de nuevo. Pero no lo consigo.
Para que os hagais una idea: el mecanismo (perl-->template->php) funciona cuando se llama desde la línea de comandos o desde el cron al ejecutable perl. Estoy intentando algo como esto:
* en el .php: consigo la $fecha nueva (GET o POST, igual me da) y escribo
1
exec('fich_perl.pl --template.tpl,' . $fecha);
* Uso apache y he dado permisos cgi-bin a los .pl y acceso al directorio donde está el 'fich_perl.pl' (esto último no me gusta nada).
La llamada 'exec' no reescribe el .php. Y ahí me quedo. He probado los 'shell_exec' y 'passthru' y tampoco. Las variables de retorno de todos ellos quedan vacías. Ya veis que soy muy novato con php y que seguro estoy malentendiendo algo básico. O también, que no quede otra que reescribir el php para que haga la faena del template: ¡da pereza!
Muchas gracias por vuestra atención

/ramiro
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Cómo automodificar un .php ejecutando un script perl sobre un template

Publicado por xve (5525 intervenciones) el 01/12/2013 21:37:59
Hola Ramiro, entiendo que el archivo se ejecuta correctamente, pero el problema lo tienes a la hora de mostrar los datos actualizados por por archivo de perl sobre la base de datos sqlite... es correcto?

Si es así, lo que puedes hacer, es una vez haya terminado, llamar a la pagina nuevamente para que muestre los datos de la base de datos... te serviría utilizar el código php:
1
header("location:pagina.php");

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ramiro

Cómo automodificar un .php ejecutando un script perl sobre un template

Publicado por Ramiro (3 intervenciones) el 02/12/2013 21:15:08
Hola. Muchas gracias 'xve' por tu atención y respuesta. He probado tu recomendación pero creo que el problema está en el 'exec' (o comandos similares) que intenta llamar al template para rehacer el .php. Tengo algo parecido a esto al principio del fichero template, antes de escribir nada html: ni espacios, ni etiquetas ni nada,
1
2
3
4
5
6
7
if (isset($_GET["fecha"])){
    $fecha = $_GET["fecha"];
    chdir('../main_dir/');
    exec('./script.pl --pla=fichero.php.tpl,' . "$fecha");
    chdir('./apache_dir/');
    header("Location: fichero.php?$fecha");
}
Esos cambios de directorios son debidos a que el script.pl se ha de ejecutar desde ese directorio (usa librerías y utilidades con paths relativos): no estoy seguro de que sean necesarios, pero tampoco veo diferencias si no los pongo. Pues bien, cuando uso una nueva fecha en la ventana del navegador (chrome uso habitualmente) aparece
1
http://192.168.1.2/MiWeb/fichero.php?2013-11-30
con la $fecha efectivamente expandida, supongo que efecto de 'header', pero no cambia nada más. Miro el fichero.php directamente con emacs y sigue como lo he dejado. Deduzco que no se ejecuta el 'exec(...)'. Y ahí sigo.
De nuevo gracias por vuestra atención e interés.

/ramiro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Cómo automodificar un .php ejecutando un script perl sobre un template

Publicado por xve (5525 intervenciones) el 02/12/2013 22:05:23
Hola Ramiro, el fichero script.pl, lo que hace es modificar el archivo fichero.php?

Yo probaría a poner rutas absolutas, ya que depende desde donde lo estés ejecutando, puede tener problemas...
Pero en principio, lo que haces actualizar la tabla de sqlite, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ramiro

Cómo automodificar un .php ejecutando un script perl sobre un template

Publicado por Ramiro (3 intervenciones) el 03/12/2013 02:10:41
Hola de nuevo, xve, y gracias otra vez. Y sí, eso es lo que hace el script.pl, de hecho lo crea a partir del .tpl. En cuanto a lo de las rutas absolutas ya lo empecé a hacer, pero es bastante palo: se trata de todos los ficheros que tramitan el sistema, librerías, utilidades, etc. Todo está escrito en perl (salvo lo de la web, que está en php ahora) y se tramita una base de datos bastante grande con nueve o diez tablas. El código, bajo licencia cc-by-sa y que no he escrito yo aunque ya lo voy manejando bastante bien, es complejo. Lo repensaré, ya que puede ser eso.

Finalmente, esta parte no actualiza las tablas SQLite, sólo las consulta para escribir los datos en los php. Para que te hagas una idea te pongo una línea del fichero.php.tpl,
1
2
<span class="etiqueta">Temperatura máxima </span><span class="dato">*{dia_temp_out_max,x,x,x,x,x,%.1f}*</span><span class="unidad"> &#176;C</span>
<span class="etiqueta"> a las </span><span class="dato">*dia_h_temp_out_max,x,x,x,x,x,%H:%M}*</span>
Ahí se ven dos tags, entre '*{' y '}*', que son las que se interpretan hasta obtener el registro, campo, tabla y query de la SQLite, las 'x' son etiquetas de la fecha que puedes poner "a mano", o que se sustituyen por los de la fecha con que se llama en
1
./script.pl --pla=fichero.php.tpl,'$fecha
Los otros son campos de formato de salida.
Un cordial saludo.

/ramiro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar