|
|
|
| Написал функцию, для определения online пользователей в чате. Вроде нормально работает, вот только, когда в онлайне несколько пользователей, при обновлении появляються пустые элементы и имена начинают скакать.
Вот функция:
function check_status()
{
$users=file("user.php"); //считываем список вошедших вида "$name|$ip|time()"
foreach ($users as $i => $value)
{
$par=explode("|",$value);
$time_now=time();
if (trim($par[2])<($time_now-20)) //сравниваем время
unset($users[$i]);
else
{
if ($par[0]==$_COOKIE['name'])
{
$par[2]=$time_now;
}
$users[$i]=$par[0]."|".$par[1]."|".$par[2];
}
}
$hdl=fopen("user.php","w");
print_r ($users); //здесь хорошо видно, как изменяеться индекс при обновлении
foreach ($users as $n => $val)
{
if ($users[$n])
fwrite($hdl,($val."\n")); //записываем обратно в файл
}
fclose($hdl);
}
|
Как решить эту проблему? | |
|
|
|
|
|
|
|
для: Drago
(31.08.2005 в 15:21)
| | $par[2], а следовательно и $val уже имеют в конце перевод строки и код
<?php
fwrite($hdl,($val."\n")); //записываем обратно в файл
?>
|
приводит к появлению пустот, убирать "\n" отсюда не совсем желательно... лучше срезу после строки
<?php
$par=explode("|",$value);
?>
|
пропустить последний элемент (т.е. $par[2]) через функцию trim(), которая отчечёт пробельные символы, в том числе и перевод строки
<?php
$par[2] = trim($par[2]);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(31.08.2005 в 19:06)
| | Спасибо!
Когда пишешь, вроде все по десять раз проверяешь, а какая-нибудь мелочь, все равно пролезет и будет на нервы действовать. :) | |
|
|
|