La función de PHP fread() nos devolverá una cadena de texto con el contenido leído desde el archivo que le indiquemos como primer parámetro.
Como segundo parámetro opcional, podemos indicar el número de bytes que se deben leer (si necesitamos leer todo el archivo podemos usar la función filesize()).
Tras usar fread() el puntero al archivo quedará en la última posición leída: la función: de ser necesario usaremos rewind() para volver a situarlo al principio del mismo.
Según la documentación oficial de PHP, en sistemas operativos que diferencian entre archivos de texto y archivos binarios (como Windows) se recomienda abrir el fichero usando el modificador b.
<?php
// Abrir el archivo en modo de sólo lectura:
$archivo = fopen("datos.txt","rb");
if( $archivo == false ) {
echo "Error al abrir el archivo";
}
else
{
$cadena1 = fread($archivo, 18); // Leemos un determinado número de caracteres
rewind($archivo); // Volvemos a situar el puntero al principio del archivo
$cadena2 = fread($archivo, filesize("datos.txt")); // Leemos hasta el final del archivo
if( ($cadena1 == false) || ($cadena2 == false) )
echo "Error al leer el archivo";
else
{
echo "<p>\$contenido1 es: [".$cadena1."]</p>";
echo "<p>\$contenido2 es: [".$cadena2."]</p>";
}
}
// Cerrar el archivo:
fclose($archivo);
?>
Aparte de fread() nos puede resultar muy útil file_get_contents(), puesto que con ella podemos obtener todo el contenido del archivo en una cadena de texto, pudiendo también indicarle la posición inicial a partir de la que deseamos extraer el texto (comenzando desde cero), y el número de caracteres a obtener. Devuelve false en caso de error.
<?php
$cadena = file_get_contents("datos.txt");
echo "<p>\$cadena es [".$cadena."]</p>";
$cadena = file_get_contents("datos.txt", null, null, 3, 12);
echo "<p>Ahora \$cadena es [".$cadena."]</p>";
?>
Otra función que te puede resultar interesante es file(), con la que obtendremos un array que contendrá cada línea de texto del archivo en una posición del mismo. Devuelve false si se ha producido un error.
<?php
$aCadena = file("datos.txt");
print_r($aCadena);
?>
Aparte de las ya comentadas, también podemos utilizar fgets() y fgetss() que nos devolverá una cadena de texto con el contenido de la línea en la que se encuentra el puntero al archivo. La diferencia entre ambas es que fgetss() limpará los caracteres HTML encontrados (si los hay). Ambas devuelven false en caso de error.
<?php
// Abrir el archivo en modo de sólo lectura:
$archivo = fopen("datos.txt","rb");
// Recorremos el archivo mostando el contenido de cada línea:
while( feof($archivo) == false )
{
echo fgets($archivo). "<br />";
}
fclose($archivo);
?>
Finalmente, otra función de la que disponemos es fgetc(), que lee un carácter desde el archivo.

Es recomendable comprobar si las operaciones realizadas con las funciones de archivos explicadas se han realizado correctamente (mediante los valores que devuelven en caso de error).

Vea también: [ fread() ] - [ file_get_contents() ] - [ file() ] - [ fgets() ] - [ fgetss() ] - [ fgetc() ] - [ filesize() ] - [ rewind() ] - [ feof() ]
Los archivos de texto delimitado o csv son archivos de texto normales en los que se utiliza un determinado carácter para separar cada campo, como en el siguiente ejemplo en el que los datos de cada línea se encuentran separados mediante punto y coma:
Para el manejo de archivos de texto delimitado o csv disponemos de las funciones de PHP fgetcsv() y fputcsv(), con las que podremos leer y escribir en ellos respectivamente, si bien podemos usar también las explicadas anteriormente como fwrite(), fread(), etc.
A continuación te mostramos un ejemplo de cómo escribir en un archivo pasando como parámetro a fputcsv() tanto o una cadena de texto como un array, que contienen los datos que se desean escribir:
<?php
$linea = "Antonia,Martel,Calvo,http://www.antoniamc74924.com/";
$aDatos = array("Rosa", "Castellano", "Herrera", "http://www.rosach3729023.com/");
// Abrimos el archivo situando el puntero al final del archivo:
$archivo = fopen( "datos.csv", "ab" );
fputcsv( $archivo, split(",", $linea), ";" );
fputcsv( $archivo, $aDatos, ";" );
fclose( $archivo );
?>
El archivo csv quedaría:
Observa que como tercer parámetro podemos indicar el carácter delimitador que debe escribirse en el archivo delimitado o csv.
En caso de que hubiesen espacios en un campo éste será escrito entre comillas dobles en el archivo de texto, como puedes ver en el siguiente ejemplo:
<?php
$linea = "Antonia;Martel H;C/Cuadrada,8;http://www.antoniamh74924.com/";
$aDatos = array("Pedro", "Ramírez Quevedo", "C/Redonda,7", "http://www.pedrorq89876.com/");
// Abrimos el archivo (si existe será sobreescrito):
$archivo = fopen( "datos.csv", "w+b" );
fputcsv( $archivo, split(";", $linea), ";" );
fputcsv( $archivo, $aDatos, ";" );
fclose( $archivo );
?>
Si queremos usar otro carácter podemos indicarlo en un cuarto parámetro (opcional):
<?php
$aDatos = array("Rosa", "Castellano Herrera", "", "http://www.rosach3729023.com/");
// Abrimos el archivo situando el puntero al final del archivo:
$archivo = fopen( "datos.csv", "ab" );
fputcsv( $archivo, $aDatos, ";", "-" );
fclose( $archivo );
?>
Si lo que deseamos es que no se use ningún carácter podemos utilizar la función fwrite().
Para obtener los datos de un archivo csv o delimitado usaremos fgetcsv() pasándole como parámetro un puntero al archivo abierto con fopen() y como segundo parámetro (opcional) el número de caracteres a leer, debiendo ser un número mayor que la longitud de la línea más larga (no se leerán caracteres de otra línea). En PHP 5 este parámetro ya no es necesario (aunque será ligeramente más lento).
Como tercer y cuarto parámetros (opcionales también) podemos indicar el carácter delimitador y el carácter de cierre, respectivamente.
Si fgetcsv() encuentra una línea en blanco se devolverá un array conteniendo un sólo campo con valor null, no siendo considerado como un error.
Veamos a continuación un ejemplo:
<?php
$archivo = fopen( "datos.csv", "rb" );
// Leer la primera línea:
$aDatos = fgetcsv( $archivo, 100, ";");
print_r( $aDatos );
echo "<br />";
// Tras la lectura anterior, el puntero ha quedado en la segunda línea:
$aDatos = fgetcsv( $archivo, 100, ";" );
print_r( $aDatos );
echo "<br />-------------------------------------<p />";
// Volvemos a situar el puntero al principio del archivo:
fseek($archivo, 0);
// Recorremos el archivo completo:
while( feof($archivo) == false )
{
$aDatos = fgetcsv( $archivo, 100, ";");
echo "Nombre: ".$aDatos[0]."<br />";
echo "Apellido 1: ".$aDatos[1]."<br />";
echo "Apellido 2: ".$aDatos[2]."<br />";
echo "WEB: ".$aDatos[3]."<br />";
echo "--------------------------<br />";
}
fclose( $archivo );
?>

Es recomendable comprobar si las operaciones realizadas con las funciones de archivos explicadas se han realizado correctamente (mediante los valores que devuelven en caso de error).

No existe una especificación estándar sobre cómo crear archivos en formato csv.

Vea también: [ Archivos csv (en inglés) ]