在 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 中处理警告 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何修复来自 PHP 中 date() 的警告" [重复]

定位PHP“每个”警告的详细来源[重复]

警告:不要多次处理对象[重复]

我的 php/mysqli 中出现错误和警告 [重复]

PHP:警告:包括未能在 Windows 上打开流没有这样的文件或目录 [重复]

PHP警告消息:count():参数必须是实现Countable的数组或对象[重复]