|
|
|
| здравствуйте! не могу найти решение проблемы: у меня есть чат (php + mysql), мне нужно вывести архив сообщений за n-ое количество часов (например, за 12). когда сообщений за заданный период времени слишком много, то этот архив почему-то начинает постоянно самоперезагружаться! хотя никаких refresh нигде нет. в чем может быть дело? 500 сообщений еще нормально выводит. я понимаю, что можно сделать вывод постранично, но мне все же нужно чтобы все было сразу :).
код скрипта вот:
<?php
require('connect.php');
require('menu.php');
$hoursget=12;
echo "<h1 align='center'>Архив чата за последние 12 часов</h1>";
for ($hours=1; $hours<=$hoursget; $hours++)
{
$arch="";
$hsta=$hours*60 - 60;
$hfin=$hours*60;
$query="SELECT * FROM chat WHERE chat_time < NOW() - INTERVAL '$hsta' MINUTE AND chat_time > NOW() - INTERVAL '$hfin' MINUTE ORDER BY chat_time DESC";
$result=mysql_query($query);
$number=mysql_num_rows($result);
for ($i=0; $i<$number; $i++)
{
$ctime = mysql_result($result,$i,"chat_time");
$a = strtotime($ctime)+28800;
$ctime = date("y-m-d h:i:s",$a);
$cnick = mysql_result($result,$i,"chat_nick");
$cmes = mysql_result($result,$i,"chat_mes");
$color = mysql_result($result,$i,"chat_color");
$arch=$arch."<font color='$color'>$ctime [<b>".$cnick."</b>] $cmes </font><br>\n";
}
echo $arch;
$arch="";
}
mysql_close($db);
?>
|
| |
|
|
|
|
|
|
|
для: irr
(06.10.2005 в 07:50)
| | А может ты злоумышленник хотишь загрузить сервер?
А на хостинге стоит ограничение. представь человек двадцать такие запросы делать будут
Попробуй выводить частями
Вывел часть, очисть буфер запроса(вроде такое можно)
Потом другую итд
Или речь не про это? | |
|
|
|
|
|
|
|
для: irr
(06.10.2005 в 07:50)
| | Не пойму вот эту часть кода, это ж слишком тормозит процесс работы:
$number=mysql_num_rows($result);
for ($i=0; $i<$number; $i++)
{
$ctime = mysql_result($result,$i,"chat_time");
$a = strtotime($ctime)+28800;
$ctime = date("y-m-d h:i:s",$a);
$cnick = mysql_result($result,$i,"chat_nick");
$cmes = mysql_result($result,$i,"chat_mes");
$color = mysql_result($result,$i,"chat_color");
$arch=$arch."<font color='$color'>$ctime [<b>".$cnick."</b>] $cmes </font><br>\n";
}
|
Можно э сделать всё намного проще, с помощью while
$result=mysql_query($query);
while($res=mysql_fetch_array($result))
{
$ctime = $res['chat_time'];
$a = strtotime($ctime)+28800;
$ctime = date("y-m-d h:i:s",$a);
$cnick = $res['chat_nick'];
$cmes = $res['chat_mes'];
$color = $res['chat_color'];
$arch=$arch."<font color='$color'>$ctime [<b>".$cnick."</b>] $cmes
}
|
А можно упростить до минимума:
$result=mysql_query($query);
while($res=mysql_fetch_array($result))
{
$arch=$arch."<font color='".$res['chat_color']."'>
".date("y-m-d h:i:s",strtotime($res['chat_time'])+28800)." [<b>".$res['chat_nick']."</b>]".$res['chat_mes']."\n";
}
|
Просто таким образом, будет быстрее работать... | |
|
|
|
|
|
|
|
для: irr
(06.10.2005 в 07:50)
| | Попробуйте заменить строки
<?php
$cnick = mysql_result($result,$i,"chat_nick");
$cmes = mysql_result($result,$i,"chat_mes");
?>
|
на
<?php
$cnick = htmlspecialchars(mysql_result($result,$i,"chat_nick"));
$cmes = htmlspecialchars(mysql_result($result,$i,"chat_mes"));
?>
|
А mysql_result() на mysql_fetch_array() - mysql_result() - это самая медленная функция из MySQL-функций. | |
|
|
|
|
|
|
|
для: irr
(06.10.2005 в 07:50)
| | пардон, спасибо всем большое! я нашел ошибку: в сообщении одного из посетителей чата содержалась meta-тега с refresh content, а у меня на тот момент еще не была установлена функция strip_tags для проверки сообщений на содержание тегов. вот так все было просто на самом деле :)). | |
|
|
|