imho.ws |
![]() |
![]() |
![]() |
# 1 |
Junior Member
Регистрация: 12.03.2006
Сообщения: 72
![]() |
Не работает гостевая
Вот такая вот проблема. На РНР написана гостевая. Так как на хостинге баз данных нет, то сохранение идет в тхт-файл и оттуда считывается. На виртуальном сервере работает нормально. Выкладываю в инет, в гостевую успешно добавляются только первых два сообщения, дальше сообщения не добавляются и в тхт-файл не записываются. При стирании этих двух сообщений и начинании сначала, опять добавляется только два сообщения. В чем может быть проблема? Я понимаю, что вопрос слишком абстрактный, но все же....хотя бы понять...это ошибка в моем коде или что-то у провайдера. Хотя, теоретически....если у меня на компе все работает, то, значит, ошибки не должно быть. Ломаю голову....
![]() |
![]() |
![]() |
# 3 |
Junior Member
Регистрация: 12.03.2006
Сообщения: 72
![]() |
Н-дя.....теперь бы еще разобраться в своей писанине )))
<?php if(isset($x)) { if(empty($n1)) { echo 'не введено имя пользователя<br>'; $x=0; } if(empty($n3)) { echo 'не заполнено поле текст сообщения<br>'; $x=0; } else { if(strlen($n3)>2000) { echo 'слишком длинное сообщение<br>'; $x=0; } } if ($x!=0) { $n3=htmlspecialchars($n3); $fk=fopen('guest1.txt','r'); clearstatcache(); $s=fread($fk,filesize('guest1.txt')); $fk=fclose($fk); if(strrpos($s,$n3)>0) { $x=0; } } } else { $x=0; } if($x==1) { if(filesize('guest1.txt')>1) { $z='&#&'; } else { $z=''; } $d=date("H:i d/m/Y"); $fk=fopen('guest1.txt','a'); $c=$z.'<tr><td><hr><font color="#CD1E6B"><strong>Дата: '.$d.'</font></strong></td></tr>'.'<tr><td>'. '<font color="#CD1E6B"><strong>Имя: </font></strong>'.$n1.'</td></tr> <tr><td><font color="#CD1E6B"><strong>E-mail: </font></strong>'.'<a href="mailto:'.$n6.'">' .'<strong><font color="#6666CC">'.$n6.'</font></strong></a>'.'<font color="#CD1E6B"><strong> Домашняя страничка: </font></strong>'.'<a href="'.$n8.'" target="_new"><strong><font color="#6666CC">'.$n8.'</font></strong></a></td></tr><tr><td>' .'<font color="#CD1E6B"><strong>Страна: </font></strong>'.$n2.', <strong><font color="#CD1E6B">Город: </font></strong>'.$n7.'</strong><p></p></td></tr><tr><td>' .$n3.' </td></tr>'."\r\n"; fwrite($fk,$c); fclose($fk); } $fk=fopen('guest1.txt','r'); clearstatcache(); $s=fread($fk,filesize('guest1.txt')); $a=explode('&#&',$s); $a=array_reverse($a); fclose($fk); /* расчет левых и правых границ вывода сообщений */ $cp=intval(count($a)/10); if($cp*10<count($a)) { $cp+=1; } function pocazat($cp,$tp) { echo 'Страницы: '; for($ii=1;$ii<=$cp;$ii+=1) { if ($ii==$tp) { echo '<a href="gost.php?p='.$ii.'"><strong><font color="##6666CC"><<'.$ii.'>></font></strong></a> '; } else { echo '<a href="gost.php?p='.$ii.'"><strong><font color="#6666CC">'.$ii.'</font></strong></a> '; } } } if(!isset($h)) { $h=1; } pocazat($cp,$h); $l=($h-1)*10; $r=$l+9; if($r>=count($a)) { $r=count($a)-1; } echo '<table width="100%" border="0">'; echo '<tr><td><img src="pol1.jpg" width="100%"></td></tr>'; for($i=$l;$i<=$r;$i++) { echo $a[$i]; } echo '<tr><td><hr><img src="pol1.jpg" width="100%"></td></tr></table>'; pocazat($cp,$h); ?> <form action="gost.php?x=1" method="post"> <table width="100%" border="0"> <tr><td width="17%"><strong>Ваше имя<span class="style1">*</span></strong></td> <td width="83%"><input name="n1" type="text" size="50"></td></tr> <tr><td><strong>E-mail</strong></td><td><input name="n6" type="text" size="50"></td></tr> <tr><td><strong>Страна</strong></td><td><input name="n2" type="text" size="50"></td></tr> <tr><td><strong>Город</strong></td><td><input name="n7" type="text" size="50"></td></tr> <tr><td><strong>Домашняя страничка</strong></td><td><input name="n8" type="text" value="http://" size="50"></td></tr> <tr><td height="125" valign="top"><strong>Текст сообщения <span class="style1">*</span></strong></td><td> <textarea name="n3" cols="50" rows="8"></textarea><br> </td></tr> <tr><td></td><td><input name="n4" type="submit" value="Отправить"> <input name="n5" type="reset" value="Очистить"> </td></tr> </table> </form> <strong>Поля, помеченные знаком <span class="style1">*</span>, обязательны для заполнения.</strong> |
![]() |
![]() |
# 4 |
МОД-Оператор ЭВМ
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
У меня работает. Поэтому сложно искать ошибку которой нет. Включи вывод всех ошибок (error_reporting=E_ALL, display_errors=On), также выставь echo везде, где идёт присвоение "$x=0", возможно запись в файл даже не инициируется.
|
![]() |
![]() |
# 7 |
Junior Member
Регистрация: 12.03.2006
Сообщения: 72
![]() |
Значит, вопрос на хостинге. Спасибо. Буду связывать с провайдером, т.е. с тем, у кого хостинг куплен....не сильна я в терминологии
![]() Потому как я тоже не вижу тут никакой ошибки. Ничего навороченного я ж не написала. Последний раз редактировалось Стефания; 05.05.2006 в 22:56. |
![]() |
![]() |
# 8 |
Member
Регистрация: 26.09.2005
Адрес: Питер
Сообщения: 336
![]() ![]() |
Стефания,
возможно у тебя закончилось место на аккаунте для хостинга. А для будущего такой совет: надо текстовый файл лочить при доступе к нему. Представь, что если у тебя несколько процессов будут пытаться записать в файл, а другие прочитать? ![]() Так что надо использовать фунцию flock(), хотя при большой посещаемости и это не всегда помогает. _http://php.rinet.ru/manual/ru/function.flock.php - мануал про flock() |
![]() |
![]() |
# 9 |
Junior Member
Регистрация: 12.03.2006
Сообщения: 72
![]() |
Kvarx
Нет, места там еще дофига и трошки ![]() Если будет большая посещаемость, я все-таки обзаведусь базами данных ))) А пока пусть будет в текстовом файле. Сегодня еще прикольнее....я могу добавить только одно сообщение. Написала хостинг-провайдеру (так я его обозвала?), сказали, будут смотреть. кстати, а если прописать while(!($fp=fopen('guest1.txt','a'))); вместо $fp=fopen('guest1.txt','a'); это что-нибудь даст для оптимизации обращения к текстовому файлу? |
![]() |
![]() |
# 10 | |
::VIP::
Guinness Liker Понаехало тут Регистрация: 26.01.2003
Адрес: В нейроне
Пол: Male
Сообщения: 2 848
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Код:
if (!$fp) $fp=fopen('guest1.txt','a')
__________________
меня не вылечат
![]() |
|
![]() |
![]() |
# 11 | |
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Только конечно не в таком виде делать цикл - надо же хоть проверять почему файл не может быть открыт (а вдруг просто нету прав на его открытие?) тогда может быть просто бесконечный цикл (ну до таймаута максимального времени выполнения ПХП-скрипта)
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
![]() |
![]() |
# 13 |
::VIP::
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
вообще, в этом случае надо было бы запись в файл вынести в отдельный класс, запросы на запись ставить в очередь этого класса - а писать на диск уже в самом классе
тогда отпадет головная боль с многопоточным программированием вот только не уверен, есть ли возможность в РНР создать singleton... ![]()
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people. |
![]() |
![]() |
# 14 |
Junior Member
Регистрация: 12.03.2006
Сообщения: 72
![]() |
Что самое интересное....от хостинг-провайдера тишина.....а написала им еще в пятницу.....точнее в четверг....в пяницу они мне прислали ответ, что мол напишите как называется файл гостевой и тхт-шный файл куда должны записываться сообщения. Я им ответила и......тишина. В нашей стране в праздники никто не работает
![]() Ладненько, давайте пока про запись в файл поговорим. Вот тут спросили зачем while.....а затем, чтоб если одновременно несколько человек обращаются к файлу, то чел все-таки дождался своей очереди. Так как лучше сделать, чтоб, например, десять человек сидят на гостевой и общаются. Мне нужно их как-то выстроить в очередь чтоли.....или просто написать, что пока один не закончит, другой становился бы в очередь. Чем не подходит while? Мне кажется, что это самое то ![]() |
![]() |
![]() |
# 15 | ||
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Примеров много тут для подобного, в пользовательских комментариях, от функций, до классов:
http://ru.php.net/manual/ru/function.flock.php Цитата:
В МАНе рекомендуют использовать для этого и пущей надежности файл-флаг: Цитата:
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
||
![]() |
![]() |
# 16 |
Junior Member
Регистрация: 12.03.2006
Сообщения: 72
![]() |
Получила сегодня ответ от хостинг-провайдера....."Такой файл существует, htdocs/guest1.txt, права 644. Так что проблем с записью в него быть не должно. Если никаких ошибок PHP не выдает при открытии файлового дескриптора, то проблема где-то в коде этой гостевой книги." Просто замечательно
![]() Что делать? ![]() |
![]() |
![]() |
# 17 | ||
Junior Member
Регистрация: 12.03.2006
Сообщения: 72
![]() |
Цитата:
Цитата:
![]() |
||
![]() |
![]() |
# 18 |
::VIP::
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Стефания, пара наводящих вопросов...
- проблема возникает, когда ты одна работаешь, или при параллельной работе нескольких человек? - всегда ли повторяется ситуация одинаково? или бывает по-разному? - не обращала внимания - атрибуты файла не меняются? вдруг у тебя после двух сообщений он почему-то RO становится... ![]() - можно линк на гостевую (+включенные все ошибки)?
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people. |
![]() |
![]() |
# 19 |
Junior Member
Регистрация: 12.03.2006
Сообщения: 72
![]() |
BorLase
-Проблема возникает не зависимо ни от чего, т.е. постоянно. -в первый день у меня давало записать два сообщения, сейчас - только одно -этот вопрос не совсем поняла, что такое RO? -линк могу дать (лучше в личку тебе его скину, не хочу чтоб пока кто-то смотрел мой сайт), но как включить все ошибки я не знаю. А при отправке сообщения, ошибки не выдает. Просто как будто сообщение отправляется, но на экране не показывается и в тхт-файл не записывается. (я просто ну совсем начинающий писатель сайтов ![]() Ссылку смотри у себя в личном ящике. |
![]() |
![]() |
# 20 |
::VIP::
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
в начале своего скрипта пишешь error_reporting(E_ALL); - это ты включаешь полный отчет об ошибках
какого размера получается твой файл? нет ли на сайте лимита на размер файла (вопрос не о свободном месте, а именно о размере единичного файла)? RO - read only - только для чтения... вряд ли, конечно... но вдруг операция записи меняет атрибуты/владельца файла так, что последующая запись становится невозможной... о! а попробуй так - первое сообщение писать в текст1.тхт, второе - в текст2.тхт и тд - так отработает? будем думать дальше... ![]()
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people. |
![]() |