omg me falta 7 representante para hacer comentarios. Este es el comentario de @Raptor @ & @ Tomm, ya que esta pregunta todavía se muestra muy alta en google serps.
Tiene toda la razón. Para archivos pequeños file($file);
está perfectamente bien. Para archivos grandes, es una exageración total. Las matrices php de b/c se comen la memoria como locas.
que acaba de ejecutar una prueba con una pequeña * .csv con un tamaño de archivo de 67MB ~ (1.000.000 líneas):
$t = -microtime(1);
$file = '../data/1000k.csv';
$lines = file($file);
echo $lines[999999]
."\n".(memory_get_peak_usage(1)/1024/1024)
."\n".($t+microtime(1));
//227.5
//0.22701287269592
//Process finished with exit code 0
Y puesto que nadie lo mencionó, sin embargo, me dio el SplFileObject
una oportunidad, que me en realidad recientemente descubierto por mí mismo.
$t = -microtime(1);
$file = '../data/1000k.csv';
$spl = new SplFileObject($file);
$spl->seek(999999);
echo $spl->current()
."\n".(memory_get_peak_usage(1)/1024/1024)
."\n".($t+microtime(1));
//0.5
//0.11500692367554
//Process finished with exit code 0
Esto estaba en mi escritorio Win7 por lo que no es representativo para el entorno de producción, pero aun así ... es la gran diferencia.
Nota: eso debe ser '$ lines [1]' –
Gracias hombre! Esto es exactamente lo que necesitaba! Además, gracias por responder tan rápido. –
si el tamaño del archivo es enorme, esta solución será lenta y ocupará mucha memoria. – Raptor