我所处理的系统会将任何意外错误以字符串形式发送回我,其中包含错误类型、消息和详细信息,例如:
Error Type - Database
Error Message - Error Executing Database Query.
Error Detail - [Macromedia][SQLServer JDBC Driver][SQLServer]String or binary data would be truncated.
现在,为了创建一个更好的UI,我应该处理这些错误,所以我考虑了explode(),并在PHP手册中找到了这个用户的响应,它帮助我用两个分隔符而不是一个分隔符来分隔结果:
然后我需要更深入地了解代码,因为我想要$key=>val对,所以我在StackOverflow上找到了这个答案。
然后我把两者结合起来,找到了这个解决方案:
private function string_to_array( $delimiters, $string )
{
// start by replacing the $delimiters
$ready = str_replace( $delimiters, $delimiters[0], $string );
// create new list() item:
// $key => $value
list( $err_typ, $err_typ_cont,
$err_mess, $err_mess_cont,
$err_det, $err_det_cont ) = explode( $delimiters[0], $ready ); # line 238
$result[ trim( $err_typ ) ] = trim ( $err_typ_cont );
$result[ trim( $err_mess ) ] = trim ( $err_mess_cont );
$result[ trim( $err_det ) ] = trim ( $err_det_cont );
return $result;
}
要调用函数,我使用array('-', PHP_EOL)
作为$delimiters
,而$string
是作为string
的错误消息
当我在字符串中插入一个随机错误并调用函数时,它运行得非常好。然而,当我从服务器触发随机错误时,我开始遇到问题,特别是list()
函数的Undefined offset
PHP错误
<br />
<b>Notice</b>: Undefined offset: 5 in <b>C:xampphtdocsapplication_backendclassclass.program.php</b> on line <b>238</b><br />
<br />
<b>Notice</b>: Undefined offset: 4 in <b>C:xampphtdocsapplication_backendclassclass.program.php</b> on line <b>238</b><br />
此外,请注意,这个数组非常奇怪和错误:
数组格式的响应
Array
(
[Error Type] => Database
Error Message
[Error Executing Database Query.
Error Detail] => [Macromedia][SQLServer JDBC Driver][SQLServer]String or binary data would be truncated.
[] =>
)
这与我在上面看到的错误相同。
我该怎么解决?我在这里错过了什么?
您正在处理的系统显然使用了与运行PHP脚本的系统不同的换行符。我建议你处理所有类型的换行符:
$delimiters = array('-', "rn", "n", "r");