PHP

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

Когда то работая над синонимайзером, я написал скрипт, который мог синонимизировать очень большие файлы, например 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 );
Теги:
большие файлы
Добавлено: 24 Мая 2018 20:15:00 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...