Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Puntoinfinito en 29 Enero 2013, 17:37 pm



Título: Escribir libremente en un HTML a través de PHP
Publicado por: Puntoinfinito en 29 Enero 2013, 17:37 pm
Hola,

Hay algúna manera de modificar un archivo de texto cualquiera (html...), pudiendo añadir textos en la linea y columna deseada. Eso sí todo a través de un script PHP.

Saludos!



Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: jdc en 29 Enero 2013, 17:40 pm
Tienes file_get_contents() para obtener cualquier html, quizas podrias editar algo en cierta linea, columna eso si, no se me ocurre para nada.


Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: Puntoinfinito en 29 Enero 2013, 19:20 pm
Mmm es que la idea es que al crear una nueva pagina, esto se añada a un menú que hay en HTML... ;/


Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: #!drvy en 29 Enero 2013, 20:45 pm
LoL. Pues haz el menú en PHP y que vaya obteniendo los items de un xml por ejemplo. Hay ciertas Class'es muy buenas para tratar XML en PHP. Así luego haces un foreach y muestras cada item del menú.

Ademas te sera mucho mas fácil editar el XML para agregar nuevas paginas.




Saludos
 


Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: Puntoinfinito en 29 Enero 2013, 21:32 pm
No, no entendiste bien.

Hay ya una página creada donde hay toda una lista.

Ejemplo
lista.html
Código:
<body>
<ul>
<li>Noticia 1</li>
<li>Noticia 2</li>
<li>- Noticia 3</li>
</ul>
</body>

Ahora yo quiero un script php que añada a lista.html un nuevo punto, es decir que escriba <li>Noticia 4</li>. Así entonces se mostrará lo que quiero.

Se entiende más o menos?


Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: jdc en 30 Enero 2013, 04:27 am
Donde tienes "Noticia 1, Noticia 2, Noticia 3 y Noticia 4"?


Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: Puntoinfinito en 30 Enero 2013, 08:54 am
Como he indicado en lista.html :)

Esa lista se encuentra en un html, lo que quiero hacer con el php es que añada "<li>Noticia X</li>". Y no puede ser con fwrite() ya que esto lo añade al final.


Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: #!drvy en 30 Enero 2013, 19:23 pm
El que no me entiende eres tu -.- pero bueno... Supongamos que tenemos un archivo...

Código
  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <title>POC</title>
  4. </head>
  5.   <ul id="mimenu">
  6.      <li>Menu 1</li>
  7.      <li>Menu 2</li>
  8.      <li>Menu 3</li>
  9.   </ul>
  10. </body>
  11. </html>

Podrías utilizar DOM para modificarlo,

Código
  1. <?php
  2. $archivo = 'documentoHTML.html';
  3. // Declaramos el DOM object.
  4. $doc = new DOMDocument;
  5. // Cargamos el archivo.
  6. $doc->loadHTMLFile($archivo);
  7. // Al final, queremos que lo ordene un poco.
  8. $doc->formatOutput = true;
  9. // Buscamos el elemento con id "mimenu"
  10. $elemento = $doc->getElementById('mimenu');
  11. // Creamos un nuevo li con contenido "Menu 5"
  12. $nuevo = $doc->createElement('li','Menu 5');
  13. // Agregamos el nuevo li al elemento
  14. $elemento->appendChild($nuevo);
  15. // Guardamos el archivo HTML
  16. $doc->saveHTMLFile($archivo);
  17. ?>

Claro que esto agrega automáticamente el html,head y etc etc etc... así que tendrás que buscar una solución para que no interfiera con lo tuyo, en caso de que uses HTML5.

También puedes utilizar regex..

Código
  1. <?php
  2. $archivo = 'documentoHTML.html';
  3.  
  4. function anadir_a_ul($nuevo=NULL,$id=NULL,$contenido){
  5.   // Extraemos el menu.
  6.   $menu = preg_match('/<ul id\=\"'.$id.'\">(.*)<\/ul>/imsu', $contenido,$result);
  7.   if(!$menu){return false;}
  8.   // Declaramos el nuevo li.
  9.   $nuevo = "<li>".$nuevo."</li>\n";
  10.   // Lo añadimos detras del </ul> y quitamos todas las lineas blancas previas.
  11.   $result = str_replace('</ul>',$nuevo.'</ul>',preg_replace('/^[ \t]*[\r\n]+/imu','',$result[0]));
  12.   // reemplazamos el nuevo con el viejo
  13.   $final = preg_replace('/<ul id\=\"'.$id.'\">(.*)<\/ul>/imsu',$result,$contenido);
  14.   return $final;
  15. }
  16.  
  17. // Obener contenido del archivo.
  18. $contenido = file_get_contents($archivo);
  19. // Procesar la funcion.
  20. $contenido_nuevo = anadir_a_ul('Menu 5','mimenu',$contenido);
  21. // Abrir archivo reemplazando su contenido.
  22. $handle = fopen($archivo,'w+');
  23. // Guardar nuevo contenido.
  24. fwrite($handle,$contenido_nuevo);
  25. fclose($handle);
  26. ?>

Lo que retornaría:
Código
  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <title>POC</title>
  4. </head>
  5.   <ul id="mimenu">
  6.      <li>Menu 1</li>
  7.      <li>Menu 2</li>
  8.      <li>Menu 3</li>
  9.   <li>Menu 5</li>
  10. </ul>
  11. </body>
  12. </html>

PD: Lo que has dicho de fwrite no es cierto. Mas que nada porque todo depende de con que propiedades abres el archivo. Si lo abres con a+ por ejemplo, si, escribirás en la ultima linea, pero si lo abres con r+ escribirás al principio.

PD2: Te estas complicando enormemente la vida y no entiendo porque. Imagínate que tienes que editar varios archivos... tendrías que ir modificandolos todos.. ademas ni siquiera sabes el peso que puede llegar a tener ese archivo.. eso es carga adicional INUTIL para PHP y para el servidor. Re-lee lo que te dije anteriormente es mucho mas fácil obtener el menu de otro archivo que tener que editar el html entero cada vez que quieres añadir uno nuevo.

Pero bueno... si estas empeñado en tener lo tuyo... ahí lo tienes.. espero que te sirva.

Saludos


Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: Puntoinfinito en 31 Enero 2013, 16:59 pm
El que no me entiende eres tu -.- pero bueno... Supongamos que tenemos un archivo...

Sí, ya entendí, pero la forma de XML y demás es la más eficaz?

Podrías utilizar DOM para modificarlo,

Código
  1. <?php
  2. $archivo = 'documentoHTML.html';
  3. // Declaramos el DOM object.
  4. $doc = new DOMDocument;
  5. // Cargamos el archivo.
  6. $doc->loadHTMLFile($archivo);
  7. // Al final, queremos que lo ordene un poco.
  8. $doc->formatOutput = true;
  9. // Buscamos el elemento con id "mimenu"
  10. $elemento = $doc->getElementById('mimenu');
  11. // Creamos un nuevo li con contenido "Menu 5"
  12. $nuevo = $doc->createElement('li','Menu 5');
  13. // Agregamos el nuevo li al elemento
  14. $elemento->appendChild($nuevo);
  15. // Guardamos el archivo HTML
  16. $doc->saveHTMLFile($archivo);
  17. ?>

Lo que buscava!! El DOM funciona perfectamente, no sabía su existencia :D Para insertar dentro de ese li, un link? Hay manera?

Gracias!! y saludos;
Puntoinfinito


Título: Re: Escribir libremente en un HTML a través de PHP
Publicado por: Puntoinfinito en 1 Febrero 2013, 17:31 pm
Ah, otra cosa, el DOM reguarda el archivo en una codificación que me deshace todos los accentos y demás. He probado de añadir esto antes de ejecutar el saveHTMLfile;

 $doc->encoding = 'UTF-8'; y  $doc->encoding = 'iso-8859-1';

Pero nada... :)

Con que se tendría que hacer?