fread

(PHP 4, PHP 5, PHP 7, PHP 8)

freadLectura del archivo en modo binario

Descripción

fread(resource $stream, int $length): string|false

fread() lee hasta length bytes en el archivo referenciado por stream. La lectura se detiene cuando se presenta alguna de las siguientes condiciones:

  • length bytes han sido leídos
  • se alcanza el final del archivo
  • un paquete se vuelve disponible o el tiempo socket timeout ha pasado (para flujos de red)
  • si el flujo se lee desde el buffer, y no representa un archivo completo, entonces al menos una lectura de un número de bytes equivalente al tamaño del bloque (generalmente 8192) se realiza; siguiendo los datos del buffer anterior, el tamaño de los datos devueltos puede ser superior al tamaño del bloque.

Parámetros

stream

Resource que apunta a un fichero del sitema que normalmente es creado usando fopen().

length

Tamaño length de bytes a leer.

Valores devueltos

Devuelve la cadena leída, o false en caso de error.

Ejemplos

Ejemplo #1 Ejemplo con fread()

<?php
// Lee un archivo y lo coloca en una cadena
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>

Ejemplo #2 Ejemplo con fread() y un archivo binario

Advertencia

En los sistemas que diferencian los archivos de texto y binarios (por ejemplo, Windows) el archivo debe ser abierto con la letra 'b' añadida al parámetro de modo de la función fopen().

<?php
$filename
= "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>

Ejemplo #3 Ejemplo con fread() y un archivo remoto

Advertencia

Cuando se lee desde cualquier fuente que no sea un archivo local, como flujos devueltos al leer archivos remotos o desde popen() y fsockopen(), la lectura se detiene después de recibir un paquete. Por lo tanto, se deben hacer bucles para recolectar los datos por paquete, como se presenta a continuación.

<?php
$handle
= fopen("http://www.example.com/", "rb");
$contents = stream_get_contents($handle);
fclose($handle);
?>
<?php
$handle
= fopen("http://www.example.com/", "rb");
if (
FALSE === $handle) {
exit(
"Fallo al abrir el flujo hacia la URL");
}

$contents = '';

while (!
feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
?>

Notas

Nota:

Si se desea leer el contenido de un archivo en una cadena de caracteres, es preferible utilizar file_get_contents() que es mucho más rápido que el código anterior.

Nota:

Se observa que la función fread() lee la posición actual del puntero de archivo. Utilice la función ftell() para encontrar la posición actual del puntero y la función rewind() para reinicializar la posición del puntero.

Ver también

  • fwrite() - Escribe en un fichero en modo binario
  • fopen() - Abre un fichero o un URL
  • fsockopen() - Abre un socket de conexión Internet o Unix
  • popen() - Crea un puntero de archivo de proceso
  • fgets() - Recupera la línea actual a partir de la posición del puntero de archivo
  • fgetss() - Obtiene un línea desde un puntero a un archivo y elimina las etiquetas HTML
  • fscanf() - Analiza un archivo según un formato
  • file() - Lee el fichero y devuelve el resultado en un array
  • fpassthru() - Muestra el resto del fichero
  • fseek() - Modifica la posición del puntero de archivo
  • ftell() - Devuelve la posición actual del puntero de archivo
  • rewind() - Reemplaza el puntero de fichero al inicio
  • unpack() - Desempaqueta datos de una cadena binaria