대용량 CSV 파일을 효율적으로 조작하기: 3천만 자 문자열 처리
대용량 CSV를 조작할 때 '메모리 부족' 오류가 발생합니다 Curl을 통해 다운로드한 파일입니다. 파일에는 약 3,050만 개의 문자가 포함되어 있으며 "r" 및 "n"을 사용하여 줄 배열로 분할하려는 시도는 과도한 메모리 소비로 인해 실패합니다. 할당 오류를 방지하려면 대체 접근 방식을 고려하십시오.
파일 쓰기 없이 데이터 스트리밍:
CURLOPT_FILE 옵션을 활용하여 데이터를 사용자 정의 스트림 래퍼에 쓰는 대신 직접 스트리밍합니다. 파일. 자신만의 스트림 래퍼 클래스를 정의하면 과도한 메모리를 할당하지 않고도 데이터 청크가 도착하자마자 처리할 수 있습니다.
스트림 래퍼 클래스 예:
class MyStream { protected $buffer; function stream_open($path, $mode, $options, &$opened_path) { return true; } public function stream_write($data) { // Extract and process lines $lines = explode("\n", $data); $this->buffer = $lines[count($lines) - 1]; unset($lines[count($lines) - 1]); // Perform operations on the lines var_dump($lines); echo '<hr />'; return strlen($data); } }
스트림 래퍼 등록:
stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");
스트림을 사용한 Curl 구성 래퍼:
$fp = fopen("test://MyTestVariableInMemory", "r+"); // Pseudo-file written to by curl curl_setopt($ch, CURLOPT_FILE, $fp); // Directs output to the stream
이 접근 방식을 사용하면 데이터 덩어리에 대해 점진적으로 작업할 수 있으므로 메모리 할당을 피하고 큰 문자열에 대한 작업이 가능해집니다.
기타 고려 사항:
위 내용은 3천만 개의 문자가 포함된 대용량 CSV 파일을 효율적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!