在 PHP 中处理警告 [重复]
Posted
技术标签:
【中文标题】在 PHP 中处理警告 [重复]【英文标题】:Handling a warning in PHP [duplicate] 【发布时间】:2018-09-13 09:34:03 【问题描述】:我正在编写一个套接字客户端,它连接到服务器并进行一些接口,获取结果并关闭。但是,有时该服务器可能已关闭或不可用,我想向我的用户显示一个漂亮的屏幕,显示系统当前已关闭。
我将如何处理它而不是让它发出所有这些警告?我认为 try/catch 不起作用,因为它实际上并没有引发异常。
我阅读了几十个答案,但它们都涉及一个全局警告处理程序,我不能使用它有两个原因:我想知道出了什么问题,而且我不想称之为无数次(通常是出错了,很多事情出错了)。
警告:socket_connect():无法连接 [10061]:由于目标机器主动拒绝,无法建立连接。在 C:\xampp\htdocs\TCPServices\Sockets.php 在第 7 行
警告:socket_write() 期望参数 1 是资源,布尔值在第 18 行的 C:\xampp\htdocs\TCPServices\Sockets.php 中给出
警告:socket_read() 期望参数 1 是资源,布尔值在第 24 行的 C:\xampp\htdocs\TCPServices\Sockets.php 中给出
警告:socket_close() 期望参数 1 是资源,布尔值在第 31 行的 C:\xampp\htdocs\TCPServices\Sockets.php 中给出
【问题讨论】:
使用@
抑制它们或确保它们不会发生。
你试过@before函数吗
有人可以将我链接到描述@函数的资源吗?如果你压制他们,你能检查一下之后是否建立了连接吗?
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);这只会向您报告致命错误
你看过socket_connect()
的文档吗?出错时返回FALSE
。检查其返回值,如果失败则避免执行任何操作。这将删除您列出的警告的来源。
【参考方案1】:
我会使用@
抑制警告,然后使用socket_last_error
查看是否有任何错误,如下所示:
$success = @socket_connect($socket, $host, $port));
$err = socket_last_error($socket);
if ($err > 0)
$errormsg = socket_strerror($err);
die("Couldn't create socket: [$err] $errormsg");
else if (!$success)
die("Couldn't create socket: error unknown");
【讨论】:
【参考方案2】:使用@ operator 抑制警告。请注意,您需要检查 socket_connect 的返回值或其他任何内容,以确保没有发生错误。
另一种方法是完全禁用错误显示,同时保留日志记录。请参阅 PHP 的 error handling。
【讨论】:
以上是关于在 PHP 中处理警告 [重复]的主要内容,如果未能解决你的问题,请参考以下文章