Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Работа с файлами


Автор: GQU 25.4.2011, 18:50
Почему виснет
Код

<?php
$file = "./666.txt";
if(!($dpr = fopen($file, "r"))) die ("Невозможно открыть файл $file.");
while(!feof($fp)){ 
fseek($dpr,1,SEEK_CUR);
echo "<b>Оставшиеся символы: </b>";
fpassthru($dpr);
}
fclose($dpr);
?>

Автор: ayax2005 26.4.2011, 13:10
while(!feof($fp)){ - что за переменная?

Автор: GQU 26.4.2011, 16:18
Код

<?php
$file = "./666.txt";
if(!($dpr = fopen($file, "r"))) die ("Невозможно открыть файл $file.");
while(!feof($dpr)){ 
fseek($dpr,1,SEEK_SET);
echo "<b>Не прочитанные символы: </b>";
fpassthru($dpr);
}
fclose($dpr);
?>

Ошибся так правильно, но все равно не работает- виснет
В чем дело ?
Почему после смещения (Seek) оно(смещение опять устанавливается в 0?) 

Автор: ayax2005 26.4.2011, 16:22
замените fseek($dpr,1,SEEK_SET); на if(fseek($dpr,1,SEEK_SET)==0)

Автор: GQU 26.4.2011, 16:28
Код

<?php
$file = "./666.txt";
if(!($dpr = fopen($file, "r"))) die ("Невозможно открыть файл $file.");
while(!feof($dpr)){ 
if(fseek($dpr,1,SEEK_SET)==0) 
echo "<b>Не прочитанные символы: </b>";
fpassthru($dpr);
}
fclose($dpr);
?>

Ну вот как получилось и что - все равно виснет

Автор: GQU 26.4.2011, 17:17
Код

<?php
$file = "./666.txt";
if(!($dpr = fopen($file, "r"))) die ("Невозможно открыть файл $file.");
while(!feof($dpr)){ 
fseek($dpr,1,SEEK_SET);
echo "<b>Указатель находится в позиции: </b>";
echo ftell($dpr);
}
fclose($dpr);
?> 

Почему ftell всегда выводит 1? 

Автор: bars80080 26.4.2011, 18:54
1,SEEK_SET - означает установить указатель на позицию 1. вы не даёте завершиться циклу

Автор: GQU 26.4.2011, 19:09
Код

<?php
$file = "./666.txt";
if(!($dpr = fopen($file, "r"))) die ("Невозможно открыть файл $file.");
while(!feof($dpr)){ 
fseek($dpr,1,SEEK_CUR);
echo "<b>Указатель находится в позиции: </b>";
echo ftell($dpr);
}
fclose($dpr);
?> 

А так почему eoef не останавливает цикл ?

Автор: bars80080 26.4.2011, 19:49
потому что feof станет true только когда будет достигнут конец файла, а вы устанавливаете внутри цикла позицию чтения всегда на 1.

Автор: ksnk 26.4.2011, 19:53
Цитата(GQU @  26.4.2011,  19:09 Найти цитируемый пост)
А так почему eoef не останавливает цикл ? 

потому, что feof устанавливается после операции чтения. 
Код

while(fseek($dpr,1,SEEK_CUR)===0){
...

може так сработает?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)