[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка цикла: где и почему?
baston
Стоит задача: читать из файла порциями по 10 кб и записывать в новый файл. Как только размер нового файла станет равным 100 кб, прекратить цикл, закрыть оба файла.
Делаю циклом, но второй файл создается равным по размеру первому и зацикливается.
Не могу понять, в чем ошибка? Если не трудно, разьясните пожалуйста.
Вот мой код:
//Имя файла
$fn = "clip2net082b.zip";
//Проверка существования файла
if(!is_file($fn)) {die("Файл не существует");}
//Открываем файл
$fd = fopen($fn, "rb");
//создаем второй файл
$part = fopen("part.tm", "ab");
//запускаем цикл
while(filesize($part) < 102400)
{
$buffer = fread($fd, 10240);
fwrite($part, $buffer);
ob_clean();//очищаем память
}
fclose($part);//закрываем второй файл
//Закрываем первый файл
fclose($fd);</span>




Спустя 28 минут, 20 секунд (7.03.2010 - 18:59) Mizka написал(а):
Цитата
и зацикливается.


filesize() просто возвращает размер файла, а условие (filesize($part) < 102400) всегда будет возвращать тру, если размер файла меньше 10кб, т.е. у тебя просто получается вечный цикл аналогично до while(true){}

Спустя 13 минут, 10 секунд (7.03.2010 - 19:12) baston написал(а):
Mizka
Спасибо. Однако мозги не хотят включаться, увы...
Как же правильно тогда составить условие? Подскажите - не соображу никак.

Спустя 19 минут, 22 секунды (7.03.2010 - 19:31) baston написал(а):
Если только так:
for($i=0; $i<102400; $i+=10240)
{
$buffer = fread($fd, 10240);
fwrite($part, $buffer);
ob_clean();
}

Спустя 22 часа, 53 минуты, 46 секунд (8.03.2010 - 18:25) Mizka написал(а):
не совсем понял, как это читать из файла порциями по 10 кб, можно прочитать файл, загнать его в буфер, а буфер поделить на порции по 10кб, разбить его на чар аррей (каждый символ весит один байт), и потом в цикле посимвольно записывать это в файл, с каждым шагом проверяя размер файла. Как-то извращенно, но как по другому - хз smile.gif

Спустя 2 минуты, 20 секунд (8.03.2010 - 18:27) baston написал(а):
Файл может быть огромным, и если мы его загоним в буфер - это есть не очень хорошо. Память, память экономим.
Я уже решил, цикл выше.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.