我达到了最大功能嵌套级别(问题末尾的完整列表)。我意识到解决这个问题的方法是xdebug.max_nesting_level
,但对此有何不妥?另外,我怎样才能更好地实现我的代码。
我正在写一个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脚本是不是很糟糕?
答案 0 :(得分:1)
从内存和计算的角度来看,递归都是昂贵的,如果你已经超过100次调用,那么这应该提醒你这不是正确的递归调用应用程序。
从套接字获取数据绝对不是应该使用递归解决的问题。
答案 1 :(得分:1)
确定一段时间循环会更有效率。而且我也相信你实际上想要存储从套接字返回的所有日期,而不是每次都覆盖$ data的内容。另外,在这里传递$ config变量似乎没用。这是一个更新版本:
function cont() {
while (!feof($this->socket)) {
fgets($this->socket, 256);
}
}