Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ошибка feof(): 3 is not a valid stream resource
Форумы портала PHP.SU » PHP » Программирование на PHP » Ошибка feof(): 3 is not a valid stream resource

Страниц (1): [1]
 

1. Дмитрий.К - 22 Октября, 2008 - 14:43:11 - перейти к сообщению
Что-то не так в этом коде? Во всех источниках он описан как работоспособный. Более того, он поначалу даже читал содержимое файла. Но перестал.. Что могло произойти?

$filename = 'main.hd'; // файл лежит рядом с .php файлом

if (filesize($filename)) {
$hfile = fopen ($filename,"r");

while (!feof($hfile)) {
$str = fgets($hfile);
$paramvalue .= $str;
}
fclose($hfile);

пишет в браузере вот так:

Warning: feof(): 3 is not a valid stream resource in C:\Program Files\Apache Group\Apache2\htdocs\test_index.php on line 16

Warning: fgets(): 3 is not a valid stream resource in C:\Program Files\Apache Group\Apache2\htdocs\test_index.php on line 17

Warning: fclose(): 3 is not a valid stream resource in C:\Program Files\Apache Group\Apache2\htdocs\test_index.php on line 22 и т.д.
2. Champion - 22 Октября, 2008 - 15:14:05 - перейти к сообщению
Странно. А fopen ошибок, как я понял, не выдает? Попробуйте вывести значение переменной $hfile сразу после fopen. Вы привели весь участок кода? Может быть после fopen вы производите какие6-нибудь присвоения $hfile или удаляете файл?..
3. valenok - 22 Октября, 2008 - 16:41:14 - перейти к сообщению
Стандартная ошибка у этой функции
Warning: fgets(): supplied argument is not a valid stream resource
А что это за тройка и откуда она берется..

Оформите пожалуйста код так чтоб он был читабелен и было ясно где какая строка.
4. Champion - 22 Октября, 2008 - 16:50:59 - перейти к сообщению
valenok пишет:
Warning: fgets(): supplied argument is not a valid stream resource
А что это за тройка и откуда она берется..

Вот это-то и интересно - вроде как fopen ошибок не дала, значит в $hfile хранится правильный дескриптор. А ворнинг говорит обратное. 3 - как раз и есть этот дескриптор. Странная штука
5. Дмитрий.К - 23 Октября, 2008 - 08:52:45 - перейти к сообщению
Спасибо..наверное это был сбой в работе сервера..хотя перезагрузка компьютера не помогала.. может это было связано с тем, что засунута в пользовательскую функцию..вообщем я переписал код с использованеим функции file..все нормализовалось..
6. Champion - 23 Октября, 2008 - 08:57:50 - перейти к сообщению
Дмитрий.К пишет:
наверное это был сбой в работе сервера..хотя перезагрузка компьютера не помогала
Это точно не сбой в работе сервера)
Дмитрий.К пишет:
может это было связано с тем, что засунута в пользовательскую функцию
О чем речь? ЧТО туда была засунута?
7. asked86 - 25 Октября, 2008 - 17:50:15 - перейти к сообщению
На будующее такие ошибки решаются следующим образом!
1) Если текста не много, то вырезаем по одной строчке, и каждый раз ее компилим и смотрим на ее поведение !
2) Если что то не получпется вставляем эту строку на место, и вырезаем другую и опять смотрим на поведение !
3) Попробуйте заменить переменные другими именами, как не странно, но я с такими ошибками сталкивался ! да да это правда !
Радость Радость Радость
8. Champion - 25 Октября, 2008 - 18:01:03 - перейти к сообщению
asked86 пишет:
то вырезаем по одной строчке,

Если уж на то пошло, то так будет гораздо быстрее:
1-Вырезаем половину кода.
2-Если ошибка осталась, работаем по этому же алгоритму с другой половиной кода.
3-Если ошибка убралась, возвращаем вырезанное на место и вырезаем половину того, что только что вернули
4-возвращаемся в п.2 до тех пор, пока не найдем ошибку Радость Радость Радость
9. asked86 - 25 Октября, 2008 - 19:42:22 - перейти к сообщению
Вот вы над этим смеетесь, а в какой то из книг знаменитого профессионала в области программирования, это один из методов поиска ошибок и выявления причин!
Иногда одна ошибка порождает все другие, и для ее выяснения так и следует их искать !
10. Champion - 25 Октября, 2008 - 19:47:36 - перейти к сообщению
Кстати, можно не вырезать, а пользоваться комментированием))
11. asked86 - 25 Октября, 2008 - 19:48:47 - перейти к сообщению
Я тоже не признавал этот метод, но когда кодил серьезный проект то потом осознал.
Было такое что искал ошибку неделю, хотя и по процедурам небольшим все разбито было, ошибку которую выдавал компилятор, она была из-за ошибки на 10 строк выше о которой, сам компилятор молчал ! И такое бывает, так что не надо быть скептиком !
Подмигивание
(Добавление)
На счет комментариев да, полностью с вами согласен !!!
Вы правы но сильно не стоит комментировать ! Очевидные строки комментировать не стоит ,
ну типа запись в файл, чтение , цикл , деление и т.п, а то начинающие начитаются про комментарии, и начинают все комментировать, а во время отладки собственные комменты бесят !
Нахмурился
(Добавление)
Ну в конце концов есть другие опрераторы:
Альтернатива,
PHP:
скопировать код в буфер обмена
  1. $handle=fopen("file.txt","r");
  2.  
  3.   $text=fread($handle,filesize("file.txt"));
  4.   $text=str_replace("\n","<br>",$text);
  5.   print($text);
  6.  fclose($handle);

Ха-ха
12. Champion - 25 Октября, 2008 - 20:11:22 - перейти к сообщению
asked86 пишет:
ошибку которую выдавал компилятор, она была из-за ошибки на 10 строк выше о которой, сам компилятор молчал

Это наверное незакрытая чткобка или что-то в этом роде... Структурное программирование помогает быстро найти такую ошибку, если вдруг она получилась... В общем тут много мнений, много способов Улыбка Ошибки разные бывают
13. asked86 - 25 Октября, 2008 - 20:24:16 - перейти к сообщению
Нет эта ошибка была следствием ошибки на 10 строк выше (о ней молчал компилятор), это была не не закрытая скобка!
Если вы этому методу не доверяете, я вас не заставлю, вернее даже убедить не смогу !

Даже если вы будете строить программы в виде объектов что вам мешает их также быстро находить(ошибки), ООП это штука, но когда чтото пишешь только один, не стоит о нем даже думать !
14. valenok - 25 Октября, 2008 - 20:33:01 - перейти к сообщению
Это значит что 10ю строками выше как раз ошибки не было, и никакой не компилятор, а интерпретатор, делал именно то что ему приказано было делать. Если вы неделю не могли справиться с отладкой, то боюсь это проблема совсем не касается интерпретатора, и не программирование вовсе.
15. asked86 - 25 Октября, 2008 - 20:44:10 - перейти к сообщению
Нет я тогда на Delphi сидел ! А там компилятор, ну какая разница принцип программирования та что на C++, что на PHP, что на Java, хоть Паскаль возьмите, или asm и т.д один и тот же!
Неделю ее искал потому что уже безразлично было, сосредоточиться не мог, а ошибка с динамическими структурами была с деревьями, памяти выделял много и контролировать было тяжело, ну что неделю искал да смешно конечно!
Ну когда на все по...й, тогда и месяц искать можно если срок не поджимает!
Ха-ха

 

Powered by ExBB FM 1.0 RC1