대용량 파일을 다룰 때 경험이 없으므로 어떻게해야할지 잘 모릅니다. 나는 여러 개의 큰 파일을 읽으려고했다. file_get_contents; 작업은 preg_replace()을 사용하여 그들을 청소하고 찌르기입니다.file_get_contents => PHP 치명적 오류 : 사용 가능한 메모리가 소모되었습니다.
내 코드는 작은 파일에서도 정상적으로 실행됩니다. 그러나, 큰 파일 (40메가바이트)는 메모리 소모 오류 트리거 :
PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 41390283 bytes)
내가 대신 FREAD()를 사용하는 생각을하지만 그 중 하나가 작동합니다 확실하지 않다. 이 문제의 해결 방법이 있습니까?
입력 해 주셔서 감사합니다. 파일 크기에 따라 메모리 제한을 조정
<?php
error_reporting(E_ALL);
##get find() results and remove DOS carriage returns.
##The error is thrown on the next line for large files!
$myData = file_get_contents("tmp11");
$newData = str_replace("^M", "", $myData);
##cleanup Model-Manufacturer field.
$pattern = '/(Model-Manufacturer:)(\n)(\w+)/i';
$replacement = '$1$3';
$newData = preg_replace($pattern, $replacement, $newData);
##cleanup Test_Version field and create comma delimited layout.
$pattern = '/(Test_Version=)(\d).(\d).(\d)(\n+)/';
$replacement = '$1$2.$3.$4 ';
$newData = preg_replace($pattern, $replacement, $newData);
##cleanup occasional empty Model-Manufacturer field.
$pattern = '/(Test_Version=)(\d).(\d).(\d) (Test_Version=)/';
$replacement = '$1$2.$3.$4 Model-Manufacturer:N/A--$5';
$newData = preg_replace($pattern, $replacement, $newData);
##fix occasional Model-Manufacturer being incorrectly wrapped.
$newData = str_replace("--","\n",$newData);
##fix 'Binary file' message when find() utility cannot id file.
$pattern = '/(Binary file).*/';
$replacement = '';
$newData = preg_replace($pattern, $replacement, $newData);
$newData = removeEmptyLines($newData);
##replace colon with equal sign
$newData = str_replace("Model-Manufacturer:","Model-Manufacturer=",$newData);
##file stuff
$fh2 = fopen("tmp2","w");
fwrite($fh2, $newData);
fclose($fh2);
### Functions.
##Data cleanup
function removeEmptyLines($string)
{
return preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $string);
}
?>
'fread()'를 사용하여 청크로 가져올 수는 있지만 그 작업의 종류와 결과에 따라 달라질 수 있는지 여부가 도움이 될지 여부. –
안녕하세요. php.ini 파일에는 파일/메모리 크기를 처리하는 속성이 있습니다. 기억 나면 크기를 늘리기 위해 번호를 변경할 수 있습니다. 이렇게하면 더 큰 파일을 처리 할 수 있습니다. –
@tom smith : 내 서버가 아니고 슬프게도 내 손이 묶여 있습니다. – Chris