imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 05.05.2006, 21:36     # 1
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
Не работает гостевая

Вот такая вот проблема. На РНР написана гостевая. Так как на хостинге баз данных нет, то сохранение идет в тхт-файл и оттуда считывается. На виртуальном сервере работает нормально. Выкладываю в инет, в гостевую успешно добавляются только первых два сообщения, дальше сообщения не добавляются и в тхт-файл не записываются. При стирании этих двух сообщений и начинании сначала, опять добавляется только два сообщения. В чем может быть проблема? Я понимаю, что вопрос слишком абстрактный, но все же....хотя бы понять...это ошибка в моем коде или что-то у провайдера. Хотя, теоретически....если у меня на компе все работает, то, значит, ошибки не должно быть. Ломаю голову....
Стефания вне форума  
Старый 05.05.2006, 21:45     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Код в студию
RaZEr вне форума  
Старый 05.05.2006, 21:54     # 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.'&nbsp;</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">&lt;&lt;'.$ii.'&gt;&gt;</font></strong></a>&nbsp;';
}
else {
echo '<a href="gost.php?p='.$ii.'"><strong><font color="#6666CC">'.$ii.'</font></strong></a>&nbsp;&nbsp;'; }
}
}
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="Отправить">&nbsp;&nbsp;&nbsp;
<input name="n5" type="reset" value="Очистить"> </td></tr>
</table>
</form>
<strong>Поля, помеченные знаком <span class="style1">*</span>, обязательны для заполнения.</strong>
Стефания вне форума  
Старый 05.05.2006, 22:12     # 4
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
У меня работает. Поэтому сложно искать ошибку которой нет. Включи вывод всех ошибок (error_reporting=E_ALL, display_errors=On), также выставь echo везде, где идёт присвоение "$x=0", возможно запись в файл даже не инициируется.
RaZEr вне форума  
Старый 05.05.2006, 22:17     # 5
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
А у тебя работает на компе? Или ты в инет выкладывал?
А в файл первые два сообщения записываются. А вот дальше......
А на компе хоть триста запиши....все записываются.....вот я и не понимаю....
Стефания вне форума  
Старый 05.05.2006, 22:24     # 6
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Цитата:
А у тебя работает на компе? Или ты в инет выкладывал?
И на компе работает, и если выкладывать.
RaZEr вне форума  
Старый 05.05.2006, 22:26     # 7
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
Значит, вопрос на хостинге. Спасибо. Буду связывать с провайдером, т.е. с тем, у кого хостинг куплен....не сильна я в терминологии
Потому как я тоже не вижу тут никакой ошибки. Ничего навороченного я ж не написала.

Последний раз редактировалось Стефания; 05.05.2006 в 22:56.
Стефания вне форума  
Старый 06.05.2006, 16:18     # 8
Kvarx
Member
 
Регистрация: 26.09.2005
Адрес: Питер
Сообщения: 336

Kvarx Известность не заставит себя ждатьKvarx Известность не заставит себя ждать
Стефания,
возможно у тебя закончилось место на аккаунте для хостинга.

А для будущего такой совет: надо текстовый файл лочить при доступе к нему. Представь, что если у тебя несколько процессов будут пытаться записать в файл, а другие прочитать?

Так что надо использовать фунцию flock(), хотя при большой посещаемости и это не всегда помогает.
_http://php.rinet.ru/manual/ru/function.flock.php - мануал про flock()
Kvarx вне форума  
Старый 06.05.2006, 20:47     # 9
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
Kvarx
Нет, места там еще дофига и трошки так что проблема не в этом.
Если будет большая посещаемость, я все-таки обзаведусь базами данных ))) А пока пусть будет в текстовом файле. Сегодня еще прикольнее....я могу добавить только одно сообщение. Написала хостинг-провайдеру (так я его обозвала?), сказали, будут смотреть.

кстати, а если прописать while(!($fp=fopen('guest1.txt','a'))); вместо $fp=fopen('guest1.txt','a'); это что-нибудь даст для оптимизации обращения к текстовому файлу?
Стефания вне форума  
Старый 08.05.2006, 13:37     # 10
Псих
::VIP::
Guinness Liker
Понаехало тут
 
Аватар для Псих
 
Регистрация: 26.01.2003
Адрес: В нейроне
Пол: Male
Сообщения: 2 848

Псих СуперБогПсих СуперБог
Псих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБог
Цитата:
Стефания:
кстати, а если прописать while(!($fp=fopen('guest1.txt','a'))); вместо $fp=fopen('guest1.txt','a'); это что-нибудь даст для оптимизации обращения к текстовому файлу?
если я есть нормальный, то не даст, лучше написать
Код:
if (!$fp)
  $fp=fopen('guest1.txt','a')
А смысл цикл тут делать вообще не понятен
__________________
меня не вылечат
Псих вне форума  
Старый 09.05.2006, 17:47     # 11
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Псих:
А смысл цикл тут делать вообще не понятен
Смысл цикл тут делать - ожидание момента, пока файл наконец сможет быть открыт. Например в случае блокировки другим процессом, банальное ожидание, пока он освободит файл.

Только конечно не в таком виде делать цикл - надо же хоть проверять почему файл не может быть открыт (а вдруг просто нету прав на его открытие?) тогда может быть просто бесконечный цикл (ну до таймаута максимального времени выполнения ПХП-скрипта)
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 09.05.2006, 18:33     # 12
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
Цитата:
Hubbitus:
Только конечно не в таком виде делать цикл - надо же хоть проверять почему файл не может быть открыт
А можно с примером?
Я только учусь
Стефания вне форума  
Старый 09.05.2006, 20:48     # 13
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
вообще, в этом случае надо было бы запись в файл вынести в отдельный класс, запросы на запись ставить в очередь этого класса - а писать на диск уже в самом классе

тогда отпадет головная боль с многопоточным программированием

вот только не уверен, есть ли возможность в РНР создать singleton...
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 09.05.2006, 21:01     # 14
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
Что самое интересное....от хостинг-провайдера тишина.....а написала им еще в пятницу.....точнее в четверг....в пяницу они мне прислали ответ, что мол напишите как называется файл гостевой и тхт-шный файл куда должны записываться сообщения. Я им ответила и......тишина. В нашей стране в праздники никто не работает ладно, подожду завтра. Ну мне интересно же.
Ладненько, давайте пока про запись в файл поговорим. Вот тут спросили зачем while.....а затем, чтоб если одновременно несколько человек обращаются к файлу, то чел все-таки дождался своей очереди. Так как лучше сделать, чтоб, например, десять человек сидят на гостевой и общаются. Мне нужно их как-то выстроить в очередь чтоли.....или просто написать, что пока один не закончит, другой становился бы в очередь. Чем не подходит while? Мне кажется, что это самое то
Стефания вне форума  
Старый 10.05.2006, 10:14     # 15
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Примеров много тут для подобного, в пользовательских комментариях, от функций, до классов:
http://ru.php.net/manual/ru/function.flock.php

Цитата:
Стефания:
Мне нужно их как-то выстроить в очередь чтоли.....или просто написать, что пока один не закончит, другой становился бы в очередь. Чем не подходит while? Мне кажется, что это самое то
А кто сказал что он не подходит? Подходит впринципе, только не совсем как приведено было в примере выше. Просто если на открытие делать цикл, то он скорее всего будет бесполезным - файл будет сразу из разных мест просто открываться и данные будут портиться.

В МАНе рекомендуют использовать для этого и пущей надежности файл-флаг:
Цитата:
MAN:
Замечание: Из-за того, что функции flock() необходим указатель на файл, вам может понадобиться воспользоваться специальным запирающим файлом для того, чтобы ограничить доступ к файлу, который вы намерены очищать путём открытыя его в режиме записи (используя "w" или "w+" в качестве аргумента функции fopen()).
....
В некоторых операционных системах flock() реализован на уровне процессов. При использовании многопоточных серверных API, таких как ISAPI, вы не можете полагаться на flock() для защиты ваших файлов от дугих PHP-скриптов, которые работают в параллельном потоке на том же сервере!
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 10.05.2006, 19:08     # 16
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
Получила сегодня ответ от хостинг-провайдера....."Такой файл существует, htdocs/guest1.txt, права 644. Так что проблем с записью в него быть не должно. Если никаких ошибок PHP не выдает при открытии файлового дескриптора, то проблема где-то в коде этой гостевой книги." Просто замечательно
Что делать?
Стефания вне форума  
Старый 10.05.2006, 23:47     # 17
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
Цитата:
Сообщение от RaZEr
Включи вывод всех ошибок (error_reporting=E_ALL, display_errors=On).
А куда это прописать в моем коде?

Цитата:
Сообщение от RaZEr
И на компе работает, и если выкладывать.
Кстати, я выложила на другой хостинг....тоже не работает
Стефания вне форума  
Старый 11.05.2006, 00:15     # 18
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
Стефания, пара наводящих вопросов...
- проблема возникает, когда ты одна работаешь, или при параллельной работе нескольких человек?
- всегда ли повторяется ситуация одинаково? или бывает по-разному?
- не обращала внимания - атрибуты файла не меняются? вдруг у тебя после двух сообщений он почему-то RO становится...
- можно линк на гостевую (+включенные все ошибки)?
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 11.05.2006, 00:25     # 19
Стефания
Junior Member
 
Регистрация: 12.03.2006
Сообщения: 72

Стефания Путь к славе только начался
BorLase
-Проблема возникает не зависимо ни от чего, т.е. постоянно.
-в первый день у меня давало записать два сообщения, сейчас - только одно
-этот вопрос не совсем поняла, что такое RO?
-линк могу дать (лучше в личку тебе его скину, не хочу чтоб пока кто-то смотрел мой сайт), но как включить все ошибки я не знаю. А при отправке сообщения, ошибки не выдает. Просто как будто сообщение отправляется, но на экране не показывается и в тхт-файл не записывается. (я просто ну совсем начинающий писатель сайтов )
Ссылку смотри у себя в личном ящике.
Стефания вне форума  
Старый 11.05.2006, 00:48     # 20
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
в начале своего скрипта пишешь error_reporting(E_ALL); - это ты включаешь полный отчет об ошибках

какого размера получается твой файл? нет ли на сайте лимита на размер файла (вопрос не о свободном месте, а именно о размере единичного файла)?
RO - read only - только для чтения... вряд ли, конечно... но вдруг операция записи меняет атрибуты/владельца файла так, что последующая запись становится невозможной...

о! а попробуй так - первое сообщение писать в текст1.тхт, второе - в текст2.тхт и тд - так отработает?

будем думать дальше...
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 21:50.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.