Estos dos procesos son los casos mas comunes y frecuentes que se pueden realizar con un archivo de disco.
GRABACION DE UNA ESTRUCTURA A UN ARCHIVO EN DISCO
Prog28.php
<HTML>
<FORM ACTION=prog28.php METHOD=post>
<INPUT TYPE=submit NAME=OK VALUE="consulta"><BR>
</FORM></HTML>
<?php
if ($OK == "consulta") {
// tamano registro y cantidad de registros
$TR=47;$CR=filesize('datos.dat') / $TR;
// creando y abriendo archivo
$archivo=fopen('datos.dat','a+') or die("no puedo abrir archivo");
//empezando una tabla html
echo "<HTML><TABLE Border=10 CellPadding=5><TR>";
echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>";
// abriendo en lectura el registro
for($x=1; $x<=(int)$CR; $x=$x+1)
{
// leyendo y desempacando el registro
$reg=fread($archivo,$TR);
$reg= unpack("iclave/A30nombre/iedad/destatura/A1bandera", $reg);
// desplegando
if ($reg[bandera] == "A"){
echo"<tr>";
echo "<td>".$reg[clave]."</td>";
echo "<td>".$reg[nombre]."</td>";
echo "<td>".$reg[edad]."</td>";
echo "<td>".$reg[estatura]."</td>";
echo"</tr>"; };
};
//cerrando archivo y tabla
echo "</table>";
fclose($archivo);
};
?>
corrida:
El archivo se abre tambien en “a+”.
Los datos se desplieganen una tabla html.
Se usa un ciclo de lectura for( 1 to cantidad de renglones) observar que el tamano del registro 47 BYTES se debera calcular con la tabla dada en el tema anterior, para este caso es entero 4bytes+ string 30bytes+ entero 4bytes+ float 8bytes+ string 1byte=47, pero si tienen dudas, solo grabar un registro y ver su tamano desde la consola.
La cantidad de registros se calculo usando una funcion de php filesize($archivo) que regresa la cantidad de bytes que tiene en total el archivo.
Se usa fread(archivo, cantidad de bytes a leer) para cargar la variable que contendra la informacion leida del archivo en disco.
Despues se tendra que desempacar la informacion, se esta usando la misma variable para obtener la informacion desempacada.
Observar primero:
1.- unpack regresa un ARREGLO ASOCIATIVO(ver este tema en la unidad de arreglos), si en la parte de marcadores de unpack no se ponen los nombres de los campos, el arreglo quedara cargado con indices numericos 1,2,3…n
2.- En la parte de marcadores ahora si se tiene que incluir el separador / entre cada marcador, recordar que aparte del marcador se tendra que incluir el nombre del campo o tendran que usar indices numericos.
3.- Por suspuesto que el empacado pack(int,int,float,string) tiene que corresponder con el desempacado unpack(int,int,float,string) o se va a tener un monton de problemas.
Se esta usando un if(bandera) para solo desplegar los registros que estan en ALTA.
Y cada campo se debera procesar con el formato normal de ARREGLOS ASOCIATIVOS es decir $nomarreglo[campo]
No olvidar cerrar la tabla html y el archivo.
TAREAS PROGRAMACION PHP
1.- Cargar y Leer los archivos de disco pedidos en el tema anterior.
Fuente:enlace
"Desarrolla tus ideas con los Cursos, Diplomados y Maestría en Uneweb www.uneweb.edu.ve"
No hay comentarios:
Publicar un comentario