====== PHP Snippets: Ficheros ======
===== Contar líneas =====
Para contar las líneas de un fichero de texto:
$file = new \SplFileObject('file.extension', 'r');
$file->seek(PHP_INT_MAX);
echo $file->key(); // Número de líneas
===== CSV =====
* [[https://datatracker.ietf.org/doc/html/rfc4180|RFC4180: especificación del formato CSV]]
==== Escritura ====
En el siguiente ejemplo se utiliza la función [[https://www.php.net/manual/es/function.fputcsv.php|fputcsv]]:
$fichero = __DIR__ . DIRECTORY_SEPARATOR . "mi_fichero.csv";
$fp = fopen($fichero, "w");
$cabecera = [
"columna1",
"columna2",
"columna3"
];
fputcsv($fp, $cabecera );
$registro = [
"valor1",
"valor2",
"valor3"
];
fputcsv($fp, $registro);
fclose($fp);
El fichero resultante tendrá los campos separados por '','', utiliza las comillas como cierre de campos con espacios. Ejemplo:
campo1, campo2, campo3
Pepito, "Rodríguez Pérez", 18
Manolito, "Gafotas Verdes", 1
"José Fernando", Suárez, 30
==== Lectura ====
$fichero = __DIR__ . DIRECTORY_SEPARATOR . "mi_fichero.csv";
$fp = fopen($fichero, "r");
while (($fila = fgetcsv($fp, 1000, $delimitador)) !== false) {
$datos[] = $fila;
}
Si queremos saltarnos la primera línea (porque contiene la cabcera con los títulos, por ejemplo), basta con obtener la primera línea del fichero y no hacer nada:
// código
fgetcsv($file, 10000, ",");
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) {
// código
}
Si queremos evitar las líneas en blanco:
$fichero = __DIR__ . DIRECTORY_SEPARATOR . "mi_fichero.csv";
$fp = fopen($fichero, "w");
while (($fila = fgetcsv($fp, 1000, $delimitador)) !== false) {
// Ignoramos las líneas vacías
if (array(null) !== $fila) {
$datos[] = $fila;
}
}
===== Recursos =====
* [[https://gist.github.com/janschoepke/3e7a3639546d0d740c023e11289cf13d|Exportación a CSV desde MySQL]]