php下的msgpack扩展定义的反序列化方法没有捕获反序列化失败时候的状态情况。如果反序列化失败,magpack只会抛出warning错误,我们没办法直接通过magpack提供的方法获取执行结果状态。其实我们可以使用php的原生方法来识别warning错误,从而判断反序列化是否成功。如下代码就可以解决我们的问题:
error_clear_last();
$ret = msgpack_unpack($recv);
if (error_get_last()) {
// 反序列化失败
} else {
// 序列化成功
}