Tengo un archivo de texto de 1.3GB del que necesito extraer información en PHP. Lo he investigado y he propuesto algunas formas diferentes de hacer lo que tengo que hacer, pero como siempre, después de aclarar un poco qué método sería mejor o si existe otro mejor que yo no conozca.¿La mejor manera de extraer texto de un archivo de texto de 1.3GB usando PHP?
La información que necesito en el archivo de texto son solo los primeros 40 caracteres de cada línea, y hay alrededor de 17 millones de líneas en el archivo. Los 40 caracteres de cada línea se insertarán en una base de datos.
Los métodos que tengo están debajo;
// REMOVE TIME LIMIT
set_time_limit(0);
// REMOVE MEMORY LIMIT
ini_set('memory_limit', '-1');
// OPEN FILE
$handle = @fopen('C:\Users\Carl\Downloads\test.txt', 'r');
if($handle) {
while(($buffer = fgets($handle)) !== false) {
$insert[] = substr($buffer, 0, 40);
}
if(!feof($handle)) {
// END OF FILE
}
fclose($handle);
}
anterior es el siguiente cada línea a la vez y obtener los datos, he ordenado todas las inserciones de bases de datos, haciendo 50 inserciones en un momento más de diez veces en una transacción.
El siguiente método es el mismo que el anterior pero realmente llama al file()
para almacenar todas las líneas en una matriz antes de hacer un foreach
para obtener los datos? No estoy seguro acerca de este método, ya que la matriz tendría esencialmente más de 17 millones de valores.
Otro método sería extraer solo una parte del archivo, reescribir el archivo con los datos no utilizados, y después de que esa parte se haya ejecutado, recuperar el script mediante una llamada header
.
¿Cuál sería la mejor manera en términos de hacer esto de la manera más rápida y eficiente? ¿O hay una mejor manera de abordar esto en lo que he pensado?
También planeo usar este script con wamp, pero ejecutarlo en un navegador mientras se prueba ha causado problemas con el tiempo de espera incluso con establecer el tiempo de script en 0. ¿Hay alguna forma de que pueda ejecutar el script sin acceder al página a través de un navegador?
Para el último punto, 'php path/to/script.php' ejecutará la secuencia de comandos. – sarnold
@sarnold ¿acabo de hacer eso desde la línea de comandos? Gracias – Griff
Sí, directamente desde la línea de comando. También puede convertirlo en un archivo de script ejecutable si tiene la intención de ejecutarlo a menudo agregando '#!/Path/to/php' en la primera línea del script y luego ejecutando' chmod 755 path/to/script' o 'chmod 500' o los permisos apropiados que desee. – sarnold