我正在开发一个基于codeigniter-3框架的皮重web应用程序,我必须将它连接到一个websocket上,如果服务器在线,一切正常,但是如果服务器离线,php错误就会发生。
我在php中使用了exec函数,它允许我ping服务器,并根据返回的数据包丢失来确定服务器是否打开。但有时它不会起作用。它允许它通过,即使服务器关闭,这有1/20的机会发生(这个静态仅基于实验)。
$host = "192.168.1.100";
$port = 6001;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
$suck = socket_connect($sock, $host, $port) or die("error: could not connect to host\n");
$tare = socket_read($sock, 1024);
$tare = trim($tare);
$tar_array = explode(" ", $tare);
for ($i=1; $i < 16 ; $i++)
{
$real_tare = $real_tare + intval($tar_array[$i]);
}
echo $real_tare;我不想看到很大的错误信息,但是在我写的时候,一个小的error_handler显示服务器关闭了一个小的,显示的是err lan,而不是停止所有应用程序的php错误。(PS。我无法提供图片或链接,因为我的声誉很低。)
发布于 2019-06-25 10:10:49
如果没有建立连接,socket_connect也就是$suck将为false。在编程中,总是尝试一些东西并检查错误,而不是寻找有效的机制(比如ping)。
在没有检查$suck是否为真的情况下,不要读取socket_read。
在socket_read发生之前,使用$suck分支到较小的error_handler。
https://stackoverflow.com/questions/56608582
复制相似问题