====== 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]]