file_get_contents получает весь файл, поэтому его заполняет память.
Я быстро придумал что-то вроде этого.
$myArray = array();
$file = "file.txt";
$bytesStreamed = 1024; //max line length times 8
$tempString = "";
$iterator = 1;
$readCode = true;
if($stream = fopen($file, 'r')) {
//stream_get_contents gets only few bytes of the file so does not use up all the memory for big files
while($streamKiloByte = stream_get_contents($stream, $bytesStreamed)) {
$temp = explode("\n", $tempString.$streamKiloByte);
$tempString = "";
for($i = 0; $i<(count($temp)-1); $i++){
if($i==0) {
//last element can be partial, lets keep it
$tempString = $temp[count($temp)-1];
} else {
array_push($myArray, $temp[$i-1]);
}
}
while(count($myArray)){
foreach($myArray AS $whatEver){
$firstElementOfArray = array_shift($myArray);
$f =& $firstElementOfArray;
if($f!="\r"){
if($f ==";=-= title{$iterator}-id{$iterator} =-=;\r"){
//the useless code started
$readCode = false;
} else if ($f == ";=-= end-title{$iterator}-id{$iterator} =-=;\r" || $f == ";=-= end-title{$iterator}-id{$iterator} =-=;"){
//the useless code ended, preapered for next block
$readCode = true;
$iterator++;
} else {
if($readCode){
//THE CODE
echo $f;
} else {
//the useless code
}
}
}
}
}
}
fclose($stream);
}
использовал его на файл:
;=-= title1-id1 =-=;
zzzzzzzzzzzz
xzqwnqrj90x9
n9ndfpo-f,m129
mf20fmf2-m,
;=-= end-title1-id1 =-=;
THE CODE 1
;=-= title2-id2 =-=;
zzzzzzzzzzzz
xzqwnqrj90x9
n9ndfpo-f,m129
mf20fmf2-m,
;=-= end-title2-id2 =-=;
THE CODE 2
;=-= title3-id3 =-=;
zzzzzzzzzzzz
xzqwnqrj90x9
n9ndfpo-f,m129
mf20fmf2-m,
;=-= end-title3-id3 =-=;
THE CODE 3
;=-= title4-id4 =-=;
zzzzzzzzzzzz
xzqwnqrj90x9
n9ndfpo-f,m129
mf20fmf2-m,
;=-= end-title4-id4 =-=;
Имел resoult:
THE CODE 1THE CODE 2THE CODE 3
P.S. Поток КОДА в файл, чтобы он взял память.
Всегда тот же формат даты? – mariotanenbaum
Насколько велик файл? Если он всегда будет относительно небольшим, возможно, вам лучше всего это прочитать в строке, сделайте очистку и запишите его обратно в файл. – Gil
@mariotanenbaum, на какую дату вы смотрите? Я не вижу никаких дат. – Mike