PHP Master » Вопросы по PHP » Как на PHP обрабатывать очень большие файлы

Вопросы по PHP » Как на PHP обрабатывать очень большие файлы

 (голосов: 5)
Опубликовал: phpmaster | 21 июня 2009 | Просмотров: 2553

Когда то работая над синонимайзером, я написал скрипт, который мог синонимизировать очень большие файлы, например sql дампы.

Думаю этот код может быть полезен новичкам в 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: -- [цитировать]

Добавление комментария

Ваше Имя:

Ваш E-Mail:

Код:

Ввести код:




Rambler's Top100