2011-09-30 69 views
0

我正在達到最大函數嵌套級別(問題結束時的完整列表)。我意識到解決這個問題的辦法是xdebug.max_nesting_level,但是有什麼不好?另外,我怎樣才能更好地實現我的代碼。PHP對象常量運行時間最大函數嵌套級別

我正在寫一個irc客戶端,現在自稱很多。

調用堆棧(摺疊)

#  | Time  | Memory  | Function   | Location 
1  | 0.0010  | 800152  | {main}()   | ..\index.php:0 
2  | 0.0010  | 802416  | IRCBot->__construc | ..\index.php:225 
3  | 0.1104  | 804368  | IRCBot->cont() | ..\index.php:34 
4  | 0.1945  | 814592  | IRCBot->cont() | ..\index.php:144 
......|................|...............|.......................|..................... 
96 | 113.8191 | 1121560 | IRCBot->cont() | ..\index.php:144 
97 | 114.0116 | 1126928 | IRCBot->cont() | ..\index.php:144 
98 | 114.2020 | 1132384 | out()    | ..\index.php:105 
99 | 114.2020 | 1132384 | flush2()   | ..\index.php:14 

我知道我可以通過增加max_nesting_level解決這個問題,但是當嵌套水平得到新的最大值時會發生什麼?另外,是我在做這個壞內存等

function cont($config) { 
    $data = fgets($this->socket, 256); 
    $this->cont($config); 
} 

問題的方式:

是增加max_nesting_level會增加我的服務器上的負載?

有沒有什麼辦法重新設計這段代碼來避免這個問題?

在CGI安裝上運行這樣的PHP腳本不好嗎?

回答

1

確定while循環會更有效率。而且我也相信你實際上想要存儲從套接字返回的所有日期,並且不會每次覆蓋$ data的內容。另外,在這裏傳遞$ config變量似乎沒有用處。這裏更新的版本:

function cont() { 
    while (!feof($this->socket)) { 
     fgets($this->socket, 256); 
    } 
} 
+0

我不需要保存數據。 –

1

從內存和計算的角度來看,遞歸的代價很高,如果你已經超過了100次調用,那應該提醒你這個事實,這不是遞歸調用的正確應用。

對於從套接字獲取數據,它絕對不是一個問題,應該使用遞歸來解決。

+0

遞歸是捕獲消息等,你會建議? –

+0

做什麼多米尼克建議。 – gview