Leer y copiar fichero con buffer PHP (fopen, fgets, fwrite, ob_flush)

Cuando manejamos archivos pequeños no hace falta usar ningún buffer ya que no es necesario leer el contenido por partes para evitar llenar la memoria de nuestro servidor, pero todo cambia cuando trabajamos con archivos pesados (grandes), estos archivos pesados pueden generar errores por sobrepasar el límite de memoria, por esta razón es necesario hacer el proceso de forma fragmentada.

Pasos a seguir para seguir la traza del ejemplo:
  • Paso 1: preparar el archivo a escribir.
  • Pase 2: abrir el archivo donde se va a leer el contenido.
  • Paso 3: trasladar poco a poco el contenido del archivo de lectura al archivo de destino mediante un buffer.

  • //creamos un fichero para escribir el contenido en él
    $ficheroDeEscritura = tempnam(null,'temp_');
     
    $fd_pdftmp = fopen($ficheroDeEscritura, 'w');//abrimos archivo en modo escritura
    if ($fd_pdftmp)
    {
       /*vamos a abrir a leer la ruta del archivo contenido en la variable 
    $ficheroALeer para copiarla en el archivo perteneciente 
    a la variable $ficheroDeEscritura*/
       $gestor = fopen($ficheroALeer, 'r'); //abrimos archivo en modo lectura
     
       //usamos buffer para ir leyendo y copiando poco el contenido
       while (($buffer = fgets($gestor, 4096)) !== false)
       {
           //escribimos contenido
    	fwrite($fd_pdftmp, $buffer);
            ob_flush();
    	set_time_limit(10);
       }
       if (!feof($gestor))
       {
    	echo "Error: fallo inesperado de fgets()\n";
       }
       fclose($gestor);
    }
    fclose($fd_pdftmp);//cerramos el descriptor

    Iván Martínez

    Ingeniero Informático apasionado por el mundo del desarrollo WEB. Me gusta caminar por este mundo lleno de tecnologías y día a día aprender cosas nuevas como el doctor Frankenstein ¡dadme cosas para experimentar!

    Deja un comentario

    Tu dirección de correo electrónico no será publicada.