場景:(訂閱)鏈接不上mqtt的時候戚篙,一下代碼會出錯:
function read($int = 8192, $nb = false){
// print_r(socket_get_status($this->socket));
$string="";
$togo = $int;
if($nb){
return fread($this->socket, $togo);
}
// var_dump($this->socket);
while (!feof($this->socket) && $togo>0) {
$fread = fread($this->socket, $togo);
$string .= $fread;
$togo = $int - strlen($string);
}
return $string;
}
錯誤分析:鏈接不到mqtt的時候,$this->socket這個結(jié)果為false溺职,while里面的一直會循環(huán)已球,$string的大小會耗死內(nèi)存臣镣。所以加一個判斷,按如下代碼修改智亮。
if ($this->socket) {
while (!feof($this->socket) && $togo>0) {
$fread = fread($this->socket, $togo);
$string .= $fread;
$togo = $int - strlen($string);
}
}
搞定忆某,又能正常運行了。