나는 CSV 파일을 10 ~ 20 메가의 라인 단위로 읽어야한다. file()은 쓸모가 없다 ;-) 그리고 나는 가장 빠른 방법을 찾아야한다.PHP에서 larges 파일을 읽는 가장 좋은 방법은 무엇입니까?
필자는 fgets()를 사용해 보았지만, 호출 할 때마다 작은 블록을 읽는 지, 아니면 더 큰 파일을 캐시하고 I/O를 최적화하는지 모릅니다. EOL을 직접 구문 분석하여 fread() 방식으로 시도해야합니까?
감사 세드릭
나는 CSV 파일을 10 ~ 20 메가의 라인 단위로 읽어야한다. file()은 쓸모가 없다 ;-) 그리고 나는 가장 빠른 방법을 찾아야한다.PHP에서 larges 파일을 읽는 가장 좋은 방법은 무엇입니까?
필자는 fgets()를 사용해 보았지만, 호출 할 때마다 작은 블록을 읽는 지, 아니면 더 큰 파일을 캐시하고 I/O를 최적화하는지 모릅니다. EOL을 직접 구문 분석하여 fread() 방식으로 시도해야합니까?
감사 세드릭
가능하면 fgetcsv()을 사용해야합니다.
그렇지 않으면 항상 fgets()가 있습니다.
당신은 fgetcsv()
을 봐야합니다. 자동으로 분리 된 줄을 배열로 구문 분석합니다.
런타임 효율성에 대해서는 잘 모르겠다. 나중에 처리 할 것으로 예상되는 크기의 파일로 빠른 테스트를 실행해야합니다. 하지만 fget면 놀라실 것입니다. ??? 및 fput ??? 기능이 I/O 최적화되지 않았습니다.
stream_get_line은 대용량 파일의 경우 fgets보다 더 효율적입니다. 읽기에 현명한 최대 길이를 지정하면 PHP가 줄을 읽는 데 '앞서 읽어야'하는 이유가 없습니다. 걱정할 것 같습니다.
CSV를 사용하려면 fgetcsv가 결과를 약간 더 현명한 형식으로 반환합니다.
기본 PHP 설정은 프로세스 당 최대 8MB의 메모리 사용을 허용합니다. 이 경우 20Mb가 큽니다. (나는 당신이 그것을 바꿀 수 있다는 것을 알고 있지만, 왜 당신이 원하지 않는지에 대한 분명한 이유가 있음). –
Jasper Bekkers가 맞고 file()이 내 필요에 너무 많은 메모리를 사용합니다. –