Actualizado el 14-01-2007
versión para imprimir

Accediendo al contenido

Naturalmente no tiene sentido abrir y cerrar un fichero si no vamos a hacer nada con el. En esta sección veremos como recuperar su contenido total o parcial, y como escribir en él.

volcado en pantalla: fpassthru y readfile

La función fpassthru lee el contenido de un fichero abierto con fopen y envia el resultado a la salida estándar (ventana del navegador, si es una aplicacion web).

Como quiera que esta función devuelve todo el contenido del fichero, PHP asume que ya hemos terminado de operar con el, y cierra el puntero al archivo, asi que no es necesario usar despues fclose

Ejemplo:

<?php
if ($file fopen"arrays.php",  "r")) {
fpassthru ($file);
}
?>

Serviria para volcar en pantalla el contenido de arrays.php. Esta función no es muy utilizada. Para incluir el contenido de otro fichero suele usarse include o require (construcciones php que no se limitan a recuperar el contenido del archivo, sino que tambien ejecutan el código que pueda haber en el) o incluso readfile, función que al igual que fpassthru se limita al volcado de datos, pero no precisa de fopen previo.

La unica diferencia entre readfile() y fpassthru() es que esta ultima requiere que usemos antes fopen. Con fpassthru() podemos además volcar a pantalla archivos binarios (p.ej. una imagen) si los abrimos con el flag b:


<?php

$filename 
"c:\images\logo.gif";
if (!(
$fp fopen ($filename"rb"))) {
    print 
"Error - no se puede abrir $filename";
}
else {
    
fpassthru($fp);
}

?>

Accediendo a todo el fichero: file()

fpassthru y readfile vuelcan el contenido del fichero en la pantalla, pero no hacen mas. Concretamente, dicho contenido no se puede almacenar en variables ni operar con el.

Si queremos acceder a todo el contenido de un fichero y operar con el podemos usar la función file(). Esta función lee el fichero linea por linea y devuelve un array (un elemento por línea).

Aspectos a tener en cuenta sobre file() son que no es una función apta para ficheros binarios (ya que busca un fin de linea como delimitador de cada elemento del array). No precisa de fopen ni fclose.

Ejemplo:


<?php

$mifichero 
"otros/mi_log.txt";

if (
$mi_array=file($mifichero)) {
    while (list (
$linea$contenido) = each ($mi_array)) {
        echo 
"nº".$linea."=".$contenido;
    }
}
?>

Lectura selectiva: fgets y fread

Si queremos especificar la cantidad de fichero que queremos recuperar podemos usar fgets o fread

fgets, con la sintaxis fgets (file_handler, longitud)lee el contenido de un fichero (abierto con fopen) hasta la longitud indicada ( - 1 byte), o hasta el primer fin de linea, o hasta el fin del archivo (es decir, hasta que se de la primera de esas tres condiciones).

Una función usada en conjunción con fgets es feof(), que chequea si hemos llegado o no al final del archivo.

Función similar a fgets() es fgetss, con la única diferencia de que si se trata de un fichero html, elimina las etiquetas html o php que puedan haber en la porción recuperada. Admite el parámetro allowable_tags donde puedes incluir aquellas etiquetas que no deseas que sean removidas.

Y si solo quieres leer un carácter cada vez, puedes usar fgetc(). Si llamas a esta función una vez, recuperas el primer carácter; el segundo carácter a la segunda llamada, y asi sucesivamente.

La función fread, con la sintaxis fread (file_handler, longitud) es muy similar a fgets. La principal diferencia es que fread lee los ficheros en modo binario, o bien hasta que ha leido los bytes especificados en el parámetro longitud, bien cuando llega al fin del archivo

Conjuntamente podemos usar filesize() (solo con ficheros locales), para obtener el tamaño del archivo y pasarle el valor como longitud a fread

Ejemplo:


<?php

// avanzamos un paso mas en nuestro contador básico:
// abrimos "contador.txt" en modo lectura

if ($file fopen"otros/contador.txt",  "r")) { 

// $visitas será la variable que almacena el numero de las visitas
// existentes hasta ahora, que leemos de  "contador.txt".  
// leemos los primeros seis carácteres. Con eso debe bastar

        
$visitas = (fgets($file6)); 
        
// Incrementamos en uno para contar la nueva visita. 

        
++$visitas

// mostramos el resultado  

        
print( "<br>nº de lecturas: $visitas<br>"); 

// Cerramos "contador.txt" 

        
fclose($file); 


// ya solo los resta como escribir en el archivo el nuevo dato !!
?>

This site powered by Phorum.