Июнь
21
Вопросы по PHP » Как на PHP обрабатывать очень большие файлы
Опубликовал: phpmaster | 21 июня 2009 | Просмотров:
2553
Когда то работая над синонимайзером, я написал скрипт, который мог синонимизировать очень большие файлы, например sql дампы.
Думаю этот код может быть полезен новичкам в php.
Думаю этот код может быть полезен новичкам в php.
$fp = fopen ( $path, "rb" ); //открываем нужный нам файл на чтение в бинарном режиме, если это дело происходит под виндой
$pathinfo = pathinfo ( $path );
$ext = $pathinfo [extension]; //узнали расширение
$filename = $pathinfo [basename]; //название файла
$dirname = $pathinfo [dirname]; //название директории
$fpn = fopen ( $dirname . "/" . $filename . "_syn.$ext", "a" ); //Создаём файл, в который будем писать уже обработанный текст(в моём случае синонимизированный)
$fsize = filesize ( $path ); //Узнаём размер исходного файла
$cicl = ceil ( $fsize / 512000 ) + 1; //узнаём кол-во циклов (важно: я остановился на 512кб, но если дело происходит на шареде, можно и поменьше)
for($i = 0; $i < $cicl; $i ++) { //запускаем цикл
if ($i == 0) {
fseek ( $fp, 0 ); //ну на первом цикле переходим естественно в начало файла
} else {
fseek ( $fp, ftell ( $fp ) ); //бегаем по файлу
}
$text = fread ( $fp, 512000 ); //читаем файл по 512кб
$text = syn_text ( $text ); //тут я синонимизирую текст, вы можете делать с ним что то своё
fwrite ( $fpn, $text ); //пищем обработанный текст в новый файл
$pos = round ( ftell ( $fp ) / 1024, 0 ); //узнаём примерное кол-во обработанных кб
print "<div class='echo'>" . $pos . "Kb обработано ...</div>"; //выводим (по желанию)
flush ();
if (feof ( $fp ) == true) { //когда достигаем конца файла прекращаем выполнение цикла
break;
}
}
fclose ( $fp ); //закрываем файлы
fclose ( $fpn );
|
#1 написал: Дмитрий |
|
|
Группа: Гости Комментариев: 0 Публикаций: 0 |
Супер, Вы лучший Сайт в закладках. |
| ICQ: -- | [цитировать] |

Навигация