Domanda

Devo leggere i file CSV riga per riga che possono essere da 10 a 20 Meg. file () è inutile ;-) e devo trovare il modo più veloce.

Ho provato con fgets (), che funziona bene, ma non so se legge un piccolo blocco ogni volta che lo chiamo, o se ne memorizza uno più grande e ottimizza l'I / O dei file. Devo provare il modo fread (), analizzando EOL da solo?

Grazie Cedric

È stato utile?

Soluzione

Dovresti utilizzare fgetcsv () se possibile.

Altrimenti, c'è sempre fgets ().

Altri suggerimenti

stream_get_line è apparentemente più efficiente dei budget per file di grandi dimensioni. Se specifichi una lunghezza massima ragionevole per la lettura, non vedo alcun motivo per cui PHP dovrebbe "leggere in anticipo" per leggere una riga, poiché sembri preoccupante.

Se si desidera utilizzare CSV, fgetcsv restituirà i risultati in un formato leggermente più sensato.

fgets () dovrebbe andare perfettamente bene per le tue esigenze. Anche file () dovrebbe essere ok - 20mb non è molto grande a meno che lo stai facendo molte volte contemporaneamente.

Non dimenticare che puoi mettere a punto fgets () con il suo secondo parametro.

Dovresti dare un'occhiata a fgetcsv () , analizza automaticamente la linea separata da coma in un array.

Per quanto riguarda l'efficienza di runtime, non ne ho idea. Dovrai eseguire un test rapido, preferibilmente con un file delle dimensioni che ti aspetti di gestire in seguito. Ma sarei sorpreso se il problema ??? e fput ??? le funzioni non erano ottimizzate per l'I / O.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top