fLIPIS
   

Modos plus


      
Los modos con un + al final indican que se pueden realizar dos operaciones: lectura y escritura. Pero no se comportan de la misma manera respecto a donde sitúan el descriptor de fichero para ambas operaciones. El modo MODE_READ_PLUS o "r+" ya lo hemos visto en la sección anterior, y hemos visto que tenía comportamiento de tecla INSERT. Veamos un ejemplo del modo MODE_WRITE_PLUS o "w+" sobre nuestro fichero de pruebas:
   
   
<?php
$test = new FileOperationsWrapper("test.txt", MODE_WRITE_PLUS);
echo $test->readLine()."<br/>";
$test->writeLineToFile("Una linea de texto");
?>
      
Al abrir el fichero, nos encontraremos con que el resultado es idéntico al del modo de escritura puro. ¿Cuál es pues, la diferencia entre estos dos? ¿Y como podría leer del fichero con este modo, si el puntero va avanzando a medida que voy escribiendo y al abrir el fichero se borra todo su contenido?. La respuesta está en la función rewind(). Esta función pone el puntero al inicio del fichero. Encapsularemos su funcionalidad de esta forma:
   
file_operations_wrapper.class.php
   
<?php
public function rewindFile()
{
   if(!is_null($this->_fileHandler))
   { 
      rewind($this->_fileHandler);
   }
}
?>
      
Este método nos pondrá el puntero al principio del fichero. Ejecutemos ahora el siguiente código:
   
   
<?php
$test = new FileOperationsWrapper("test.txt", MODE_WRITE_PLUS);
$test->writeLineToFile("Una linea de texto");
$test->rewindFile();
echo $test->readLine()."<br/>";
$test->writeLineToFile("Otra Linea de texto");
$test->rewindFile();
echo $test->readLine()."<br/>";
echo $test->readLine()."<br/>";
?>
      
Primero abrimos el fichero, escribimos en el, y lo rebobinamos. Leemos una línea del fichero (la que acabamos de insertar), y escribimos otra línea. Volvemos a rebobinar el fichero, y podemos mostrar las dos líneas por pantalla, que ahora están en el fichero. Fijaos que no es escribir lo que borra el contenido del fichero, sino la apertura en si, dependiendo del modo. En este ejemplo podemos ver que, de hecho, se puede leer desde el fichero con el modo "w+", pero es necesario rebobinar el puntero si queremos volver al principio del mismo. Veamos ahora, por último, el modo MODE_APPEND_PLUS o "a+".
   
   
<?php
$test = new FileOperationsWrapper("test.txt", MODE_APPEND_PLUS);
$test->writeLineToFile("Una linea de texto");
$test->rewindFile();
echo $test->readLine()."<br/>";
echo $test->readLine()."<br/>";
$test->writeLineToFile("Otra linea de texto");
echo $test->readLine()."<br/>";
echo $test->readLine()."<br/>";
?>
      
Quizás este sea el mas curioso de los modos. Al abrir el fichero, el puntero se sitúa al final, donde escribimos una línea de texto. Rebobinamos el fichero, y al leer, saca las dos primeras líneas de texto. Es al volver a escribir donde el puntero "a+" se muestra mas inteligente, pues se pone al final del contenido actual del fichero, es decir, detrás de la línea que acabábamos de insertar. Escribimos otra línea, y los sucesivos readLine() no mostrarán nada por pantalla, pues el puntero ha quedado al final del fichero. Es por esto un modo curioso, sabe donde leer si es rebobinado, y sabe que toda la escritura debe hacerse en la posición final del fichero.
      
Con esto damos por terminado este básico tutorial sobre PHP y ficheros. Espero que hayáis aprendido algo, y en un próximo tutorial, volveremos a ver funciones relativas a ficheros. Hasta entonces, un saludo de fLIPIS.