Camillo
Новичок
Помогите пожалуйста разобраться с примером с php.net
Привет.
В комментариях к ф-ии fgets нашел комментарий. В этом кусочке кода показывают как можно обрабатывать файлы большого объёма, читая их "порциями".
Попробовал применить этот php код к простому log файлу размером 140Мб. Поставил размер "порции" равным 1Мб;
и сделал так, чтобы во время считывания файла производился подсчет символов chr(10).
После запуска кода - обнаружил, что кол-во символов chr(10), подсчитанное скрпитом не соответствует кол-ву строк в log файле. Цифра очень похожая, но всё же не точная.
Умные люди, подскажите пожалуйста - в чем может быть дело?
Вот пример самого кода:
Я очень извиняюсь, что нарушил правила форума и отразил такой большой кусок кода. Надеюсь на ваше понимание.
Спасибо.
Привет.
В комментариях к ф-ии fgets нашел комментарий. В этом кусочке кода показывают как можно обрабатывать файлы большого объёма, читая их "порциями".
Попробовал применить этот php код к простому log файлу размером 140Мб. Поставил размер "порции" равным 1Мб;
и сделал так, чтобы во время считывания файла производился подсчет символов chr(10).
После запуска кода - обнаружил, что кол-во символов chr(10), подсчитанное скрпитом не соответствует кол-ву строк в log файле. Цифра очень похожая, но всё же не точная.
Умные люди, подскажите пожалуйста - в чем может быть дело?
Вот пример самого кода:
PHP:
<?
$file = "file.log";
$fp = fopen($file, 'r');
$read = 1048576;
$part = 0;
$k = 0;
while(!feof($fp)) {
if(!is_valid($fp, "stream")) die();
$rbuf = fread($fp, $read);
for($i=$read; $i > 0 || $n == chr(10); $i--) {
$n=substr($rbuf, $i, 1);
if($n == chr(10)) {
break;
}
elseif(feof($fp)) {
$i = $read;
$buf = substr($rbuf, 0, $i+1);
$k += substr_count($buf, chr(10));
break;
}
}
$buf = substr($rbuf, 0, $i+1);
$k += substr_count($buf, chr(10));
$part = ftell($fp)-($read-($i+1));
if (filesize($file) < $part) die();
fseek($fp, $part);
}
echo($k);
fclose($fp);
?>
Спасибо.
.

