【问题标题】:Handling a warning in PHP [duplicate]在 PHP 中处理警告 [重复]
【发布时间】: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。检查其返回值,如果失败则避免执行任何操作。这将删除您列出的警告的来源。

标签: php


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 2021-07-26
      • 2012-10-05
      相关资源
      最近更新 更多