今天碰到了这个,不知道如何解决它。
我想抓住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
抛出错误时找到方法。
答案 0 :(得分:6)
在将输入值传递给hex2bin方法之前,您可以检查输入值以验证它是否为十六进制。
if (ctype_xdigit($bar) && strlen($bar) % 2 == 0) {
$foo = hex2bin($bar);
} else {
//display error here
}
答案 1 :(得分:1)
根据documentation,hex2bin
返回:
给定数据的二进制表示或失败时为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()
的类型。