메모리 제한을 초과하는 문자열 조작
3천만 문자 CSV 파일의 경우처럼 지나치게 큰 문자열을 처리할 때 메모리 할당 오류 발생할 수 있습니다. 이 문제를 해결하려면 전체 문자열을 메모리에 로드하지 마십시오. 대신, 메모리 제한을 초과하지 않고 데이터를 처리하기 위한 대체 전략을 사용하십시오.
대체 접근 방식:
Stream Wrapper를 사용한 구현 예:
class MyStream { protected $buffer; function stream_open($path, $mode, $options, &$opened_path) { // Has to be declared, it seems... return true; } public function stream_write($data) { $lines = explode("\n", $data); $lines[0] = $this->buffer . $lines[0]; $nb_lines = count($lines); $this->buffer = $lines[$nb_lines-1]; unset($lines[$nb_lines-1]); var_dump($lines); // Process data as needed echo '<hr />'; return strlen($data); } } // Register custom stream stream_wrapper_register("test", "MyStream"); // Configure curl with target "file" $fp = fopen("test://MyTestVariableInMemory", "r+"); curl_setopt($ch, CURLOPT_FILE, $fp); // Data will be sent directly to stream curl_exec($ch); curl_close($ch); // Don't forget to close file / stream fclose($fp);
이 전략을 사용하면 다음을 처리할 수 있습니다. 데이터가 도착하는 대로 점진적으로 처리하여 메모리 할당 문제를 방지합니다.
위 내용은 메모리 제한을 초과하지 않고 거대한 문자열을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!