場(chǎng)景:(訂閱)鏈接不上mqtt的時(shí)候,一下代碼會(huì)出錯(cuò):
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;
}
錯(cuò)誤分析:鏈接不到mqtt的時(shí)候,$this->socket這個(gè)結(jié)果為false,while里面的一直會(huì)循環(huán),$string的大小會(huì)耗死內(nèi)存。所以加一個(gè)判斷,按如下代碼修改。
if ($this->socket) {
while (!feof($this->socket) && $togo>0) {
$fread = fread($this->socket, $togo);
$string .= $fread;
$togo = $int - strlen($string);
}
}
搞定,又能正常運(yùn)行了。