if ( preg_match ( '/[oc]:[^:]*\d+:/i', $seried ) ) { return array(); } 其中$seried是未定义的。
下载的一个开源系统来学习,其中一段代码:
function iunserializer($value) {
if (empty($value)) {
return array();
}
if(version_compare(PHP_VERSION, '7.0.0', '>=')){
$result = unserialize($value, array('allowed_classes' => false));
}else{
if(preg_match('/[oc]:[^:]*\d+:/i', $seried)){
return array();
}
$result = unserialize($value);
}
if ($result === false) {
$temp = preg_replace_callback('!s:(\d+):"(.*?)";!s', function ($matchs){
return 's:'.strlen($matchs[2]).':"'.$matchs[2].'";';
}, $value);
return unserialize($temp);
} else {
return $result;
}
}
其中的这个if判断不知道什么意思,因为$seried是一个没有定义的变量(搜索了整个项目代码也没有定义):
if ( *preg_match('/[oc]:[^:]\d+:/i', $seried ) ) {
return array();
}
看它的上一级逻辑,这个是在PHP7以下版本才会处理。这是编码错误还是针对低版本PHP的什么特殊处理?
我试过在低版本运行,系统也没有什么错误出现。