PHP: <?php $user = $_GET['user']; $time = $_GET['time']; $nick = $_GET['nick']; if($time) $time = 0; if($nick) $nick = " "; $file = "s.php"; //Файл с логами $users = file($file); $num_msg = 0; if(!$user){ for($i=0;$i<count($users);$i++){ $line=explode("\t",$users[$i]); if($line[10]){ $msg[$num_msg] = $line[3]."<font color=white>: ".$line[8].": </font> ".$line[11]."<font color=white>(".date("H",$line[2]).":".date("i",$line[2]).":".date("s",$line[2]).")</font>"; $time_msg = $line[2]; $time_msg_num[$num_msg] = $line[2]; $name = $line[4]; $num_msg = $num_msg + 1;} } }else{ for($i=0;$i<count($users);$i++){ $line=explode("\t",$users[$i]); if($line[10] and ($line[4] == $user or $line[8] == $user)){ $msg[$num_msg] = $line[3]."<font color=white>: ".$line[8].": </font> ".$line[8]."<font color=white>(".date("H",$line[2]).":".date("i",$line[2]).":".date("s",$line[2]).")</font>"; $time_msg = $line[2]; $time_msg_num[$num_msg] = $line[2]; $name_num[$num_msg] = $title[3]; $name = $line[4]; $num_msg = $num_msg + 1;} } } for($m=1;$m<count($msg);$m++){ $msg[$m]; if($time_msg_num[$m] == $time or $time_msg_num[$m] > $time){ if($time_msg_num[$m] == $time){ if($name_num[$m] != $nick) echo "<script>parent.frame('content', '".$msg[$m]."');</script>\n"; } else{echo "<script>parent.frame('content', '".$msg[$m]."');</script>\n";} } } ?> <script>setTimeout('location.href="sa.php?time=<?=$time_msg?>&nick=<?=$name?>&user=<?=$user?>"',5000);</script> Этот скрипт должен читать логи и выводить их в другом фрейме. Но почемуто выводит он их вот так: HTML: <script>parent.frame('content', '<font color="#DADADA">RENO</font><font color=white>: Л@пОчК@: </font> <font color="#DADADA">сижу один дома,пью пиво чуток,скучно,грустно и одиноко...</font> <font color=white>(19:29:10)</font>');</script> Переводит строку в ненужном месте, соответственно javascript не может обработать этот пораметр и нихрена не показывает. Как убрать этот перевод строки? Вот логи: Код (Text): [0] => 36969 1 1288726143 <font color="#CFD316">КИПИШЬЬЬ</font> КИПИШЬЬЬ cd774f3937a39c6c2ae73761e354db82 80177 0 <font color="#CFD316"><b><i>крах</i></b></font> [1] => 36970 1 1288726148 <font color="#DADADA">миш@</font> миш@ 30c961d0351a1eda1f49b22adf34663e 52983 Девочка_Ангел 1980f9e3b8c9e20645cf39e49333365a 58691 <font color="#DADADA"><b><i>тут буду спать</i></b></font> [2] => 36971 1 1288726150 <font color="#DADADA">RENO</font> RENO 499f7892b65d6ef63a1885c59d2f047b 484 Л@пОчК@ 8460064df766c49981a26f192bc3a141 29406 <font color="#DADADA">сижу один дома,пью пиво чуток,скучно,грустно и одиноко...</font> [3] => 36972 1 1288726152 <font color="#DADADA">Девочка_Ангел</font> Девочка_Ангел 1980f9e3b8c9e20645cf39e49333365a 58691 миш@ 30c961d0351a1eda1f49b22adf34663e 52983 <font color="#DADADA"><b>ок)</b></font> [4] => 36973 1 1288726163 <font color="#ADFF4F">бояр</font> бояр b56f20d906780b9d1d6b2a491f5c7165 76754 Л@пОчК@ 8460064df766c49981a26f192bc3a141 29406 <font color="#ADFF4F"><i>ответная была любовь?</i></font> [5] => 36974 1 1288726176 <font color="#E6C400">Commentator</font> Commentator 806babce776d8ea5071ae636136f8276 9274 ses <font color="#E6C400"><span class="vic1"><b>Подсказка:</b> </span> <span class="vic2"><b>о</b></span></font> [6] => 36975 1 1288726190 <font color="#E6C400">Commentator</font> Commentator 806babce776d8ea5071ae636136f8276 9274 ses <font color="#E6C400">_PrInCiP_: Чем ты занимаешься?</font> [7] => 36976 1 1288726191 <font color="#ADFF4F">_Katya_</font> _Katya_ a682b36e0d955f2f8f034f05058b9bf9 80504 0 <font color="#ADFF4F"><b><i>КИПИШЬЬЬ: че то ваще жопа какая то... да?</i></b></font> [8] => 36977 1 1288726192 <font color="#ADFF4F">бояр</font> бояр b56f20d906780b9d1d6b2a491f5c7165 76754 Л@пОчК@ 8460064df766c49981a26f192bc3a141 29406 <font color="#ADFF4F"><i>если трудно говорить</i></font>
Во всех строчках насчитал максимум 10 табуляторов, а значит элемент массива будет состоять из 10 строк. У тебя же в 13-ой строке кода пытается вывести $line[11]. Откуда ему взяться? Как вариант, перед выводом текста просто удаляй все переходы на новую строку (str_replace).
А вот ещё вопрос, хотел сделать, чтоб при обновлении он выводил только те сообщения, у которых время больше, чем у времени, которое передаётся через get в переменной $time. Вывод сообщений у меня сейчас таким образом PHP: for($m=0;$m<count($msg);$m++){ $msg[$m] = str_replace("\r\n", "", $msg[$m]); if($time_msg_num[$m] == $time or $time_msg_num[$m] > $time){ if($time_msg_num[$m] == $time){ if($name_num[$m] != $nick) echo "<script>parent.frame('content', '".$msg[$m]."');</script>\n"; } else{echo "<script>parent.frame('content', '".$msg[$m]."');</script>\n";} } } Почему он выводит старые сообщения ещё раз и только патом новые?
Угу, есть такое. Работал не по специальности просто, не было времени заглядывать. Теперь я надолго. _virus_ Попробуйте вот так: PHP: for($m=0;$m<count($msg);$m++){ $msg[$m] = str_replace("\r\n", "", $msg[$m]); if($time_msg_num[$m] > $time){ echo "<script>parent.frame('content', '".$msg[$m]."');</script>\n"; } } Если будет работать нормально, то потом определитесь зачем вам там проверка никнейма.
Johnatan Не работает, посматрите пожалуйсто, мож гдето в другом месте ошибку сделал: PHP: <?php $user = $_GET['user']; $time = $_GET['time']; $nick = $_GET['nick']; if($time) $time = 0; if($nick) $nick = " "; $file = "s.php"; //Файл с логами $users = file($file); $num_msg = 0; if(!$user){ for($i=0;$i<count($users);$i++){ $line=explode("\t",$users[$i]); if($line[10]){ $msg[$num_msg] = $line[3]."<font color=white>: ".$line[8].": </font> ".$line[11]."<font color=white>(".date("H",$line[2]).":".date("i",$line[2]).":".date("s",$line[2]).")</font><br>"; $time_msg = $line[2]; $time_msg_num[$num_msg] = $line[2]; $name_num[$num_msg] = $title[3]; $name = $line[4]; $num_msg = $num_msg + 1;} } }else{ for($i=0;$i<count($users);$i++){ $line=explode("\t",$users[$i]); if($line[10] and ($line[4] == $user or $line[8] == $user)){ $msg[$num_msg] = $line[3]."<font color=white>: ".$line[8].": </font> ".$line[8]."<font color=white>(".date("H",$line[2]).":".date("i",$line[2]).":".date("s",$line[2]).")</font><br>"; $time_msg = $line[2]; $time_msg_num[$num_msg] = $line[2]; $name_num[$num_msg] = $title[3]; $name = $line[4]; $num_msg = $num_msg + 1;} } } for($m=0;$m<count($msg);$m++){ $msg[$m] = str_replace("\r\n", "", $msg[$m]); if($time_msg_num[$m] == $time or $time_msg_num[$m] > $time){ if($time_msg_num[$m] == $time){ if($name_num[$m] != $nick) echo "<script>parent.frame('content', '".$msg[$m]."');</script>\n"; } else{echo "<script>parent.frame('content', '".$msg[$m]."');</script>\n";} } } ?> <script>setTimeout('location.href="sa.php?time=<?=$time_msg?>&nick=<?=$name?>&user=<?=$user?>"',5000);</script>
Вот я протупил, извеняюсь за беспокойство. Код (Text): if($time) $time = 0; if($nick) $nick = " "; Перед каждой переменной забыл поставить восклицательные знаки Код (Text): $name_num[$num_msg] = $title[3]; Тут я был сонный и вместо $line[3] написал $title[3] Johnatan Проверка никнейма для того, что если два пользователя одновременно отправили сообщения, то у них время будет одинаковое, надо проверить какой из них отправил сообщение последним. Ещё раз извеняюсь за свою невнимательность, спасибо что уделили мне времени!