php
  • mysql
  • xampp
  • 2013-08-03 83 views 0 likes 
    0

    我正在PHP + Mysql中開發聊天應用程序。連接到mysql時PHP超時

    我的想法是我在後臺打開腳本(ajax),它會持續加載一分鐘以檢查用戶是否收到任何新消息。

    $start = time(); 
    
        while(time() - $start < 60) 
        { 
    
        $result = mysql_query("SELECT * FROM messages WHERE `to` = '$me_user'"); 
    
         if(mysql_num_rows($result)) 
         { 
         $row = mysql_fetch_array($result); 
         $id = $row['id']; 
         $from = $row['from']; 
         $time = $row['time']; 
         $msg = $row['message']; 
    
         mysql_query("DELETE FROM messages WHERE id = $id"); 
    
         die("appendMsg('$msg',to,'$time');"); 
         } 
        $result = null; 
        Sleep(2); 
        } 
    

    所以實際上它會檢查每2秒新的消息。

    但我的問題是,整個網站開始「滯後」,因爲這一點。 我覺得問題是在睡眠()。

    有時甚至在嘗試連接到數據庫時發生PHP超時。

    Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\chatly\config.php on line 19

    任何建議我該如何暫停2秒? 或者你認爲每2秒通過ajax發送新的請求會更好?

    +0

    你爲什麼不嘗試用AJAX做呢? – Memolition

    +0

    ,因爲我認爲如果我的腳本加載時間爲60秒,會每2秒檢查一次新郵件,它會減少資源。 你認爲如果ajax提出請求,每個2s會更好? –

    +0

    是的,用戶可以使用該頁面沒有任何滯後 – Memolition

    回答

    0

    喲可以用AJAX試試吧:

    setInterval(function() { 
        if(window.XMLHttpRequest) { 
         ajax_request = new XMLHttpRequest(); 
        } else if (window.ActiveXObject) { 
         ajax_request = new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
    
        ajax_request.open('POST', 'getChatMessages.php', true); 
        ajax_request.send(null); 
    
        ajax_request.onreadystatechange = function() { 
         if(ajax_request.readyState == 4) { 
          if(ajax_request.status == 200) { 
           document.getElementById('chat_content').innerHTML = ajax_request.response; 
          } 
         } 
        } 
    }, 2000); 
    
    +0

    我知道,但我認爲太多的請求會花費太多的資源。所以我認爲最好每分鐘只請求一次 –

    +0

    這是同樣的事情,使用相同的PHP或者使用其他文件,通過使用ajax避免的是頁面滯後 – Memolition

    0

    要解決,你可以使用ini_set('max_execution_time', 60);的超時設置爲一分鐘的致命錯誤。

    Sleep(2)功能應該是sleep(2)

    +0

    我的max_execution時間設置爲60秒。應該立即加載的腳本的其他部分超時 –

    +0

    PHP超時未設置爲60秒。只有你的while循環超時。 PHP會在while循環結束之前超時整個腳本,這會導致致命錯誤。 – TMKCodes

    +0

    我把它設置爲像set_time_limit(60); 我正在談論的部分應該立即加載的網站,但他們不會因爲睡眠。 Config.php應該立即連接到數據庫! –

    相關問題