Foros del Web » Programando para Internet » PHP »

Editar .html desde php

Estas en el tema de Editar .html desde php en el foro de PHP en Foros del Web. Buenas a todos, he estado buscando por google para intentar aclararme de como puedo editar una archivo .html automaticamente desde php pero lo que e ...
  #1 (permalink)  
Antiguo 13/04/2014, 11:28
nnc
 
Fecha de Ingreso: julio-2011
Mensajes: 11
Antigüedad: 12 años, 8 meses
Puntos: 0
Editar .html desde php

Buenas a todos, he estado buscando por google para intentar aclararme de como puedo editar una archivo .html automaticamente desde php pero lo que e conseguido es enredarme mas.

Lo que quiero hacer exactamente es encontrar dentro del archivo html un campo donde pone una día y hora y reemplazarlo por el día y hora actual, una vez echo esto guardarlo como html.

Espero que me puedan echar una mano.
Gracias de antemano
  #2 (permalink)  
Antiguo 13/04/2014, 11:43
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Editar .html desde php

Si nos explicas un poco más quizás podriamos darte soluciones con los que no te hagan falta el html, pero respondiendo tu pregunta directamente.

El archivo html debe estar al alance de tu php...Lo abres y lo manipulas como cualquier archivo de texto.

Por favor, nos muestras un ejemplo del html, en el que estan la fecha y hora, necesitaria ver los distinctivos
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #3 (permalink)  
Antiguo 13/04/2014, 16:28
nnc
 
Fecha de Ingreso: julio-2011
Mensajes: 11
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Editar .html desde php

Gracias por tu respuesta!
El archivo html es local esta en el ordenador donde se ejecutaría el script.

Asi serian los archivos html a los que hay que cambiar la hora a la actual pero claro la fecha y hora cambia en cada documento html.

Código HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
</head>
<body>


<div id="si_general">
<h3>General</h3>
<table>
<tr><td class="column1">Motherboard Manufacturer:</td><td class="altvalue">ASRock</td></tr>
<tr><td class="column1">Motherboard Name:</td><td class="altvalue">Z77 Extreme3</td></tr>
<tr><td class="column1">Motherboard Serial Number:</td><td class="altvalue">E80-29006805081</td></tr>
<tr><td class="column1">BIOS Manufacturer:</td><td class="altvalue">American Megatrends Inc.</td></tr>
<tr><td class="column1">BIOS Version:</td><td class="altvalue">P1.10</td></tr>
</table>

</div>
<div id="si_cpu">
<h3>CPU</h3>
<table>
<tr><td class="column1">CPU manufacturer:</td><td class="altvalue">GenuineIntel</td></tr>
<tr><td class="column1">CPU Type:</td><td class="altvalue">Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz</td></tr>
<tr><td class="column1">CPUID</td><td class="altvalue">Family 6, Model 3A, Stepping 9</td></tr>
<tr><td class="column1">Physical CPU's:</td><td class="altvalue">1</td></tr>
<tr><td class="column1">Cores per CPU:</td><td class="altvalue">4</td></tr>
<tr><td class="column1">Hyperthreading:</td><td class="altvalue">Disabled</td></tr>
<tr><td class="column1">CPU features:</td><td class="altvalue">MMX SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 DEP PAE Intel64 VMX SMX AES </td></tr>
<tr><td class="column1">Clock frequencies:</td><td class="altvalue"></td></tr>
<tr><td class="column1">-  Measured CPU speed:</td><td class="altvalue">3603.7 MHz</td></tr>
<tr><td class="column1">Cache per CPU package:</td><td class="altvalue"></td></tr>
<tr><td class="column1">-  L1 Instruction Cache:</td><td class="altvalue">4 x 32 KB</td></tr>
<tr><td class="column1">-  L1 data cache:</td><td class="altvalue">4 x 32 KB</td></tr>
<tr><td class="column1">-  L2 cache:</td><td class="altvalue">4 x 256 KB</td></tr>
<tr><td class="column1">-  L3 cache:</td><td class="altvalue">6 MB</td></tr>
</table>

</div>

</div>
<div id="si_graphics">
<h3>Graphics</h3>
<table>
<tr><td class="column1">NVIDIA GeForce GTX 750</td><td class="altvalue"></td></tr>
<tr><td class="column1">Chip Type:</td><td class="altvalue">GeForce GTX 750</td></tr>
<tr><td class="column1">DAC Type:</td><td class="altvalue">Integrated RAMDAC</td></tr>
<tr><td class="column1">Memory:</td><td class="altvalue">1024MB</td></tr>
<tr><td class="column1">BIOS:</td><td class="altvalue">Version 82.7.25.0.91</td></tr>
<tr><td class="column1">Driver provider:</td><td class="altvalue">NVIDIA</td></tr>
<tr><td class="column1">Monitor 1:</td><td class="altvalue">1366x768x32 60Hz (Primary monitor) </td></tr>
</table>

</div>
<div id="si_diskvolumes">
<h3>Disk volumes</h3>
<table>
<tr><td class="value">C:  Local drive, NTFS, (931.41GB total, 907.35GB free)</td></tr>
<tr><td class="value">D:  Optical drive, GSP1RMCULXFREO_ES_DVD, UDF</td></tr>
</table>

</div>
<div id="si_diskdrives">
<h3>Disk drives</h3>
<table>
<tr><td class="value">Unidad de disco: Model ST1000DM003-1CH162 ATA Device (Size: 931.51GB)</td></tr>
</table>

</div>
<div id="si_opticaldrives">
<h3>Optical drives</h3>
<table>
<tr><td class="value">D: TSSTcorp CDDVDW SE-208DB (CD-RW/DVDRW)</td></tr>
</table>

</div>
<div id="si_network">
<h3>Network</h3>
<table>
</table>

</div>
<div id="si_ports">
<h3>Ports</h3>
<table>
<tr><td class="value">Puerto de comunicaciones: COM1 - RS232 Serial Port (max Baud rate: 115200)</td></tr>
</table>

</div>
<div id="si_usb">
<h3>USB</h3>
<table>
<tr><td class="value">Controlador de host de PCI a USB mejorado</td></tr>
<tr><td class="value">Controlador de host de PCI a USB mejorado</td></tr>
<tr><td class="value">-  USB Optical Mouse</td></tr>
</table>

</div>
<h2>Result summary</h2>
<table width=640>
<tr><td class="value"><strong>Test Start time</strong></td><td class="altvalue">Tue Mar 11 12:51:54 2014 </td></tr>
<tr>
<td width="40%" class="value"><strong>Test Stop time</strong></td>
<td width="60%" class="altvalue">Tue Mar 11 13:22:01 2014
</td>
</tr>
<tr>
<td width="40%" class="value"><strong>Temperature HDD 0 (ST1000DM003-1CH162 ATA Device) (Max)</strong></td>
<td width="60%" class="altvalue">28.0C</td>
</tr>
<tr>
<td width="40%" class="value"><strong>Temperature GPU 0 (nVIDIA) (Max)</strong></td>
<td width="60%" class="altvalue">53.0C</td>
</tr>
</table>



</body>
</html> 
Lo que quiero que se modifique es: Tue Mar 11 12:41:54 2014 y Tue Mar 11 13:22:01 2014 , el primer dato por la fecha y hora actual -40 min y el segundo por la fecha y hora actual.


Saludos
  #4 (permalink)  
Antiguo 13/04/2014, 16:43
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Editar .html desde php

La teoria es la siguiente

-Abrir el archivo (fopen)
-meter linea por linea en un array
-Cerrar el archivo (fclose)
-Buscar la linea del array en la que salga Result Summary, sacándo el indice numérico
-Crear la fecha de ahora en el formato Tue Mar 11 12:51:54 2014 y meterlo en una variable
-Crear una variable de la linea con el html de la linea en la que está la fecha, quitando la fecha que pone y metiendo la fecha de la variable previamente generado, algo así
$html = '<tr><td class="value"><strong>Test Start time</strong></td><td class="altvalue">'.$fecha.'</td></tr>';
-Repetir el mismo proceso con la fecha de abajo
-Reemplazar las lineas del array por las nuevas
-Con un implode unirlas todas con un salto de linea, o sea "\r\n" de separador en una variable
-con la funcion file_put_content(); sobreescribir el archivo html por el contenido de la variable generada.
-Listo

Ahora, buscate la vida para hacerlo (si tienes interes en aprender a hacerlo pregunta lo que sea), o que alguien te lo haga bajo ese seguimiento, o me esperas hasta mañana que es tarde y me voy a dormir :P

EDIT:

Esto es un código que hice hace mucho tiempo que cubren los puntos hasta que tengas las lineas del archivo en un array

Código PHP:
    $pagina "ruta del archivo";
        
$abro fopen($pagina,"r");//abro la web correspondiente
        
$yo 1//Contador para leeer todas las lineas
        
while(!feof($abro)) //Meto el codigo fuente en un array 
        
{
            
$libro[$yo] = fgets($abro,1024); //libro será la variable del codigo
            
$yo++;
        }
        
$cierro fclose($abro); //cierro la pagina 
Yo lo hacia para leer paginas web pero es lo mismo
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #5 (permalink)  
Antiguo 15/04/2014, 08:26
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Editar .html desde php

El prometido codigo, un saludo

Código PHP:
Ver original
  1. <?php
  2. $fichero = "ruta del archivo";
  3. $abro = fopen($pagina,"r");//abro la web correspondiente
  4. $yo = 1; //Contador para leeer todas las lineas
  5. while(!feof($abro)) //Meto el codigo fuente en un array
  6. {
  7.     $libro[$yo] = fgets($abro,1024); //libro será la variable del codigo
  8.     $yo++;
  9. }
  10. $cierro = fclose($abro); //cierro la pagina  
  11.  
  12. //Calculando fechas
  13. $fecha1=date('D M j H:i:s Y', time()-(40*60));
  14. $fecha2=date('D M j H:i:s Y');
  15.  
  16. //Buscando las linea Central de guia
  17. $ind = array_keys($libro, '<h2>Result summary</h2>');
  18.  
  19. //Reemplazando lineas del array
  20. $libro[$ind+2] = '<tr><td class="value"><strong>Test Start time</strong></td><td class="altvalue">'.$fecha1.' </td></tr>';
  21. $libro[$ind+5] = '<td width="60%" class="altvalue">'.$fecha2;
  22.  
  23. //Conviertiendo array en texto
  24. implode("\r\n",$libro);
  25.  
  26. //Guardando archivo
  27. file_put_contents($fichero, $libro);

No está probado, pero deberia ir
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #6 (permalink)  
Antiguo 15/04/2014, 15:01
nnc
 
Fecha de Ingreso: julio-2011
Mensajes: 11
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Editar .html desde php

Muchas gracias!!

Voy a probar a ver si me funciona y te digo algo.
  #7 (permalink)  
Antiguo 20/04/2014, 07:49
nnc
 
Fecha de Ingreso: julio-2011
Mensajes: 11
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Editar .html desde php

E probado el código y lo primero parece que funciona bien pero cuando se va a reemplazar las lineas me sale este error

Fatal error: Unsupported operand types ... on line 20

Estuve probando para solucionarlo pero no he podido.
  #8 (permalink)  
Antiguo 20/04/2014, 20:14
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Editar .html desde php

Buena solucion la que te dieron...

Quizas se podria compactar un poco mas con preg_replace_callback()
__________________
Salu2!
  #9 (permalink)  
Antiguo 22/04/2014, 02:32
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Editar .html desde php

Aviso desde ya que yo he hecho el código sin probarlo, pero ya me imagino que se lo que es.

Código PHP:
Ver original
  1. <?php
  2.     $fichero = "ruta del archivo";
  3.     $abro = fopen($pagina,"r");//abro la web correspondiente
  4.     $yo = 1; //Contador para leeer todas las lineas
  5.     while(!feof($abro)) //Meto el codigo fuente en un array
  6.     {
  7.         $libro[$yo] = fgets($abro,1024); //libro será la variable del codigo
  8.         $yo++;
  9.     }
  10.     $cierro = fclose($abro); //cierro la pagina  
  11.      
  12.     //Calculando fechas
  13.     $fecha1=date('D M j H:i:s Y', time()-(40*60));
  14.     $fecha2=date('D M j H:i:s Y');
  15.      
  16.     //Buscando las linea Central de guia
  17.     $ind = array_keys($libro, '<h2>Result summary</h2>');
  18.     $ind = $ind[0];
  19.  
  20.     //Reemplazando lineas del array
  21.     $libro[$ind+2] = '<tr><td class="value"><strong>Test Start time</strong></td><td class="altvalue">'.$fecha1.' </td></tr>';
  22.     $libro[$ind+5] = '<td width="60%" class="altvalue">'.$fecha2;
  23.      
  24.     //Conviertiendo array en texto
  25.     implode("\r\n",$libro);
  26.      
  27.     //Guardando archivo
  28.     file_put_contents($fichero, $libro);

El error es que array_keys, aunque solo encuentre 1 resultado, te devuelve un array, y luego intenté sumarlo yo un numero al array, lo que es una operacion imposible.

@italico76. No conozco la función preg_replace_callback, según lo que veo hace algo similar al array_keys en mi código. Aun así si se puede resumir mi código, siempre estoy interesado en aprender mas :)

El motivo por el que busqué por un punto de referencia en el HTML envés de contar simplemente desde arriba que linea es cada una, es porque pienso que la cantidad de lineas de ese HTML puede ser variable, como por ejemplo si el usaurio que entrega ese informe tiene 2 tarjetas gráficas, o 2 CPU's si se trata de un servidor. Si evalua el html del dxdiag (me imagino que es) de otro ordenador, las lineas de las fechas estaran situadas a diferente altura, sin embargo, aun así estarán siempre a +2 y +5 del texto único que escogí como referencia. Así deja de importar si el documento no tiene siempre la misma cantidad de lineas.
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #10 (permalink)  
Antiguo 24/04/2014, 05:14
nnc
 
Fecha de Ingreso: julio-2011
Mensajes: 11
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Editar .html desde php

Gracias por tu ayuda, pero me da error en la linea 18

Undefined offset: 1 in ....
  #11 (permalink)  
Antiguo 04/05/2014, 16:01
nnc
 
Fecha de Ingreso: julio-2011
Mensajes: 11
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Editar .html desde php

Alguien tiene idea de por que falla el script...

Etiquetas: html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:42.