“如何知道‘服务器是不是在线’而不在 socket_connet 中出现 php 错误”
Posted
技术标签:
【中文标题】“如何知道‘服务器是不是在线’而不在 socket_connet 中出现 php 错误”【英文标题】:“How to know if ‘server is a live or not’ without getting php error in socket_connet”“如何知道‘服务器是否在线’而不在 socket_connet 中出现 php 错误” 【发布时间】:2019-06-15 08:06:39 【问题描述】:我正在开发一个基于 codeigniter-3 框架的 tare 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。由于我的声誉低,我无法提供图片或链接。)
【问题讨论】:
【参考方案1】:socket_connect aka $suck
如果未建立连接,则为 false。总是在编程中尝试一些东西并检查错误,而不是寻找活动机制(如 ping)。
如果没有先检查$suck
是否为真,请不要阅读socket_read
。
在socket_read
发生之前,使用$suck
分支到较小的error_handler
。
【讨论】:
感谢@danblack 的回答,并对我迟到的回复感到抱歉,所以为了更明确,你对socket_read 所说的一切都是正确的,但我的问题是socket_connect,它发送一个不合适的 php 错误,并且花了很多时间来加载页面。这是我使用的代码。php $host = "192.168.1.100"; $port = 6001; $sock = socket_create(AF_INET, SOCK_STREAM, 0); if(socket_connect($sock, $host, $port)) echo "alive"; tare = socket_read($sock, 1024); $tare = trim($tare)'; else echo "dead";
以上是关于“如何知道‘服务器是不是在线’而不在 socket_connet 中出现 php 错误”的主要内容,如果未能解决你的问题,请参考以下文章