如何捕获hex2bin()警告

时间:2016-12-17 00:16:29

标签: php

今天碰到了这个,不知道如何解决它。

我想抓住hex2bin()发出的E_WARNING级错误。

我以为我可以使用try()catch()异常方法,但它不起作用。

try {
    $foo = hex2bin($bar);
}
catch (Exception $e) {
    die('Custom message');
}

发布的标准E_WARNING当然是:

  

警告:hex2bin():输入字符串必须是十六进制字符串

在这种特殊情况下,我想要使用标准方法来禁用错误,例如:

error_reporting(-1);
error_reporting(E_ALL);
ini_set("display_errors", 1);

我也不想使用@hex2bin方法来抑制错误。

我实际上希望显示自定义错误,但我似乎无法在hex2bin抛出错误时找到方法。

2 个答案:

答案 0 :(得分:6)

在将输入值传递给hex2bin方法之前,您可以检查输入值以验证它是否为十六进制。

if (ctype_xdigit($bar) && strlen($bar) % 2 == 0) {
    $foo = hex2bin($bar);
} else {
    //display error here
}

答案 1 :(得分:1)

根据documentationhex2bin返回:

  

给定数据的二进制表示或失败时为FALSE。

这意味着如果你想在try/catch块中使用它,你可以这样做:

try {
  $foo = @hex2bin($bar);
  if(false === $foo) {
    throw new Exception("Invalid hexedecimal value.");
  }
} catch(Exception $e) {
  echo $e;
}

是的,hex2bin被取消了。如果您设置@以取消警告,则可以删除error_reporting

或者,您可以在使用$foo之前检查ctype_xdigit()hex2bin()的类型。