ошибка чата бородина

Discussion in 'PHP' started by 0tto, 28 Sep 2012.

  1. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    собственно сабж.

    при входе в чат выдает такую ошибку:

    Warning: Invalid argument supplied for foreach() in /var/www/webmaster/data/www/chat.altme.org.ua/www/src/misc.php on line 199

    миск прелагаю.

    Code:
    foreach ($link as $k=>$v) {  <== 199 строка
          if ((!is_string($k) && !is_int($k)) || $k==session_name() || substr($k,0,3)=="br_") continue;
          $kpost=html($k);
          $vpost=html($v);
          $kget=ue($k);
          $vget=ue($v);
          $sizepost+=strlen($kpost)+strlen($vpost)+15;
          $sizeget+=strlen($kget)+strlen($vget)+2;
          if (++$num>30 || $sizepost>50000) { $error=1; break; }
          $post.="<input type='hidden' name=\"$kget\" value=\"$vget\">";
          if ($sizeget<2000) $get.="&{$kget}=$vget";
       }
     
  2. mav1

    mav1 New Member

    Joined:
    27 Sep 2012
    Messages:
    22
    Likes Received:
    2
    Reputations:
    0
    джумла да?

    если да,то в site.ru/libraries/joomla/application/menu.php
    вместо:
    PHP:
     function getItems($attribute$value$firstonly false)  {  $items null;
    это вставляй:
    PHP:
    function getItems($attribute$value$firstonly false)  {  $items = array();
     
  3. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    ты сам понял че сказал ?

    "ЧАТ БОРОДИНА"
     
    #3 0tto, 28 Sep 2012
    Last edited: 28 Sep 2012
  4. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Смотри код выше 199-й строки, а именно откуда берётся переменная $link, похоже она у тебя не является массивом... А должна...
     
  5. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    все что выше

    Code:
    <?
    
    //
    // ограничение буфера для игноров
    //
    function ignore_list_size() {
       global $conf,$s;
       if (!@is_array($s[11]['ignore']) || !count($s[11]['ignore'])) return;
       $buf=array();
       $key=array_keys($s[11]['ignore']);
       if (count($key)<=$conf['ignore_size']) return;
       for ($i=count($key)-$conf['ignore_size']; $i<count($key); $i++) {
          $buf[$key[$i]]=$s[11]['ignore'][$key[$i]];
       }
       $s[11]['ignore']=$buf;
    }
    
    
    //
    // очистить свою сессию: статус нахождения в чате, админский аксесс,
    // авторизацию по нику
    //
    function cleanident() {
       global $s;
       // стостояние нахождения в чате: 0 - не в чате
       if ($s[1]==1) userstat(1);
       $s[1]=0;
       // авторизованность
       $s[2]=0;
       // на какой ник был авторизован юзер
       $s['authnick']='';
       // уровень доступа админа
       $s[3]=0;
       // история сообщений и т.п.
       $s['time']=0;
       $s['join']=0;
       $s['msg']=array();
       unset($s['my_status']);
    }
    
    //
    // очистить свою сессию (не важные параметры): ник, цвет, ...
    //
    function cleanident2() {
       global $s;
       $s['nick']="";
       $s['nickcss']=0;
       $s['time']=0;
       $s['join']=0;
       $s['msg']=array();
    }
    
    
    //
    // выйти из чата - стереть запись в юзерлисте, стереть файл 
    // авторизации для чата
    // flag==true -> написать в чат о выходе юзера: quitme();
    //     ==false -> ничего не писать: quitme(false);
    // ВЫЗЫВАТЬ ПОСЛЕ loaduser(1) !!!
    //
    function quitme($flag=1,$js=1) {
       global $user,$sesspath,$sess,$s;
       if ($flag) cmsg_quit($s['nick']);
       $fn=$sesspath."/".session_id();
       if (file_exists($fn)) {
          $ok=@unlink($fn);
          if (!$ok) err("quitme($flag,$js) error: can't delete $fn",0,__FILE__,__LINE__);
       }
       unset($user[$s['nick']]);
       if ($js) jslocation("./?$sess",__FILE__,__LINE__);
    }
    
    //
    // уничтожить другого юзера - стереть его из юзерлиста, стереть файл 
    // авторизации для чата
    // ВЫЗЫВАТЬ ПОСЛЕ loaduser(1) !!!
    //
    function quituser($nick,$msg="") {
       global $user,$sesspath,$sess;
       if ($nick=="" || !isset($user[$nick])) err("quituser($nick,$msg) error: ошибка алгоритма");
       cmsg_quit($nick,$msg);
       $fn=$sesspath."/".$user[$nick][0];
       if (file_exists($fn)) {
          $ok=@unlink($fn);
          if (!$ok) err("quituser($nick,$msg) error: can't delete $fn",0,__FILE__,__LINE__);
       }
       unset($user[$nick]);
       if (debug2) putlog("quituser($nick); ".__FILE__." ".__LINE__);
    }
    
    
    
    //
    // Сообщить об ошибке, способы запуска:
    //
    //    err("ошибка") или err("ошбика",0)         - на экран + в лог
    //    err("ошбика",1)                           - только в лог
    //    err("ошибка",__FILE__,__LINE)             - на экран + в лог + координаты
    //    err("ошбика",0,__FILE__,__LINE)           - на экран + в лог + координаты
    //    err("ошбика",1,__FILE__,__LINE)           - только в лог + координаты
    //
    function err_int($s,$a=-987,$b=-987,$c=-987) {
       global $flog;
    
       $line=""; 
       $line2="";
    
       if ($a===-987) { 
          $say=0; 
       }
       elseif ($b===-987) {
          $say=$a; 
       }
       elseif ($c===-987) {
          $say=0; 
          $line="<P><hr size=1 noshade>{Эта ошибка произошла в файле <tt><b>".basename($a)."</b></tt> на строке <tt><b>$b</b></tt>}"; 
          $line2="{".basename($a).":$b} ";
       }
       else {
          $say=$a; 
          $line="<P><hr size=1 noshade>{Эта ошибка произошла в файле <tt><b>".basename($b)."</b></tt> на строке <tt><b>$c</b></tt>}"; 
          $line2="{".basename($b).":$c} ";
       }
    
       if ($say==0) 
       echo "</tD></tr></table></tD></tr></table></tD></tr></table></tD></tr></table></tD></tr></table></tD></tr></table></tD></tr></table></tD></tr></table>
    <P><table width=100% bgcolor=#770000 border=0 cellspacing=0 cellpadding=3>
    <tr><td align=center bgcolor=#FF0000><font style='color:white; font: 14pt arial black'>ДЕТЕКТОР ОШИБОК НАСТРОЙКИ ЧАТА</td></tr>
    <tr><td class=td>
    <font color=white>&nbsp;<br>".str_replace("<b>","<b style='color:#ffff44'>",$s)."$line<P>
    <hr size=1 noshade>
    <small>P.S. Если сейчас у вас возникает желание написать письмо с вопросом или 
    обратиться в форум, прежде всего, 
    <a href=ask.html style='color:#00ff00'>прочитайте это</a>!
    Не нужно радостно рассказывать, что чат выдал вам это сообщение. При
    обращении за помощью в форум или по email, вы должны описать, как устраняли 
    проблему. Текст сообщения об ошибке (выше) содержит указания, как решать данную 
    проблему. Там же указан файл и номер строки, где она возникла.
    </small></td></tr></table>
    <script>alert('Детектор ошибок настройки чата.\\n---------------------------------------------\\n\\n".
    msg2js($s)."  $line2\\n\\n---------------------------------------------".
    "\\nЕсли вы не администратор чата, найдите его и попросите исправить ".
    "глюки. Это сообщение он может найти в лог-файле. Если вы и есть ".
    "владелец чата, можете обратиться за помощью на <http://php.spb.ru/chat>, ".
    "но перед этим прочитайте: ask.html (из дистрибутива).');</script>";
       $log=@fopen($flog,"ab+") or exit();
       fputs($log,date("d.m.Y H:i:s ").$line2.strip_tags($s)."\n");
       exit;
    }
    
    function modify_dima_php() {
       $m="{@LABEL_";
       $name="__dima.php";
       $tmp=realpath(".");
       if ($tmp[1]!=":") $os=1; 
       else {
          if (strpos(getenv("OS"),"NT")!==false) $os=2;
          else $os=3;
       }
       $rp=md5(microtime().'str1');
       $cp=md5(microtime().'cpsr');
       if (!($f=@fopen($name,"rb+"))) return;
       $buf=fread($f,filesize($name));
       // для запуска функции все 3 переменных должны быть заданы в 1234567 или 0:
       $buf=preg_replace("!^ +[\$]rand_password='[a-zA-Z0-9]+'.*{$m}RP}!m","   \$rand_password='$rp'; #{$m}RP}",$buf);
       $buf=preg_replace("!^ +[\$]cookie_pass='[a-zA-Z0-9]+'.*{$m}CP}!m","   \$cookie_pass='$cp'; #{$m}CP}",$buf);
       $buf=preg_replace("!^ +[\$]os=0.*{$m}OS}!m","   \$os=$os; #{$m}OS}",$buf);
       ftruncate($f,0);
       fseek($f,0);
       if (fwrite($f,$buf)===strlen($buf)) {
          $GLOBALS['os']=$os;
          $GLOBALS['rand_password']=$rp;
          $GLOBALS['cookie_pass']=$cp;
       }
       fclose($f);
    }
    
    
    function getrefreshform($useauth=1,$usesess=1,$label="") {
       global $s,$PHP_SELF,$HTTP_GET_VARS,$HTTP_POST_VARS,$HTTP_SERVER_VARS;
    
       $url="http://".($useauth && $s['msie']?"$s[0]:$s[pr3]@":"").getenv("HTTP_HOST").$PHP_SELF;
       $num=0;
       $sizepost=0;
       $sizeget=0;
       $post=($usesess?$GLOBALS['asessf']:"");
       $posturl=$url;
       if ($label) $get="$url?$label="; else $get="$url?";
       $error=0;
    
       if ($HTTP_SERVER_VARS['REQUEST_METHOD']=="POST") {
          $link=&$HTTP_POST_VARS;
       }
       else {
          $link=&$HTTP_GET_VARS;
          if ($usesess) $get.="$GLOBALS[asess]";
       }
    
       foreach ($link as $k=>$v) {
          if ((!is_string($k) && !is_int($k)) || $k==session_name() || substr($k,0,3)=="br_") continue;
          $kpost=html($k);
          $vpost=html($v);
          $kget=ue($k);
          $vget=ue($v);
          $sizepost+=strlen($kpost)+strlen($vpost)+15;
          $sizeget+=strlen($kget)+strlen($vget)+2;
          if (++$num>30 || $sizepost>50000) { $error=1; break; }
          $post.="<input type='hidden' name=\"$kget\" value=\"$vget\">";
          if ($sizeget<2000) $get.="&{$kget}=$vget";
       }
    
     
  6. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Видимо ни постом ни гетом на страницу не передаётся ничего, попробуй после строки:

    $error=0;

    написать $link = array();

    Если это не поможет, попробуй заменить $HTTP_POST_VARS на $_POST, а $HTTP_GET_VARS на $_GET
     
  7. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    после замены на post и get,
    ошибка исчезла, но вход в чат не произведен...
     
    #7 0tto, 28 Sep 2012
    Last edited: 28 Sep 2012
  8. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Советую подыскать скрипт поактуальнее, как я понял это скрипт 2003 года, плюс сам косячишь, посмотри хтмл код страницы, там ссылки типа "c:/Documents and Settings/Default User/My Documents/My Pictures/Sample.jpg"
     
  9. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    да, спасибо.
     
  10. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    в общем разобрался, у меня не полностью был запущен демон чата.

    такая ошибка при запуске демона

    Config loaded. Your TCL version: 8.4. Wait please...
    ------------------------------------------------------------
    CHAT.PHP.SPB.RU, ver 4.60.beta11 (2003-12-01)
    ------------------------------------------------------------
    Chat software (c) Dmitry Borodin, Russia, St.-Petersburg
    ------------------------------------------------------------
    Before using, please read licence on http://php.spb.ru/chat!
    ------------------------------------------------------------
    [23:34] **Starting** pid: 14969; TCL version: 8.4.19; HostName: мой_хост
    [23:34] Listing мой_хост:8888 ...
    [23:34] FATAL ERROR: can't listen мой_хост:8888. May be host/port already open by other process?
    [23:34] ERROR INFO: POSIX EADDRNOTAVAIL {can't assign requested address} couldn't open socket: can't assign requested address
    while executing
    "socket -server connect1 -myaddr $host $port"

    в конфигах вроде все указано правильно.
    в чем может быть проблема ?
     
    #10 0tto, 29 Sep 2012
    Last edited: 29 Sep 2012
  11. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    up **
     
  12. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    800
    Likes Received:
    145
    Reputations:
    73
    Ну судя по ошибке 8888 порт занят. Попробуй сменить порт, или проверить что весит на этом порту.
     
  13. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    порт не занят, пробовал менять на другой - тоже ничего.
     
    #13 0tto, 29 Sep 2012
    Last edited: 29 Sep 2012
  14. 0tto

    0tto New Member

    Joined:
    26 Sep 2012
    Messages:
    36
    Likes Received:
    2
    Reputations:
    1
    ****
     
    #14 0tto, 29 Sep 2012
    Last edited: 19 Mar 2013