【发布时间】:2017-11-07 21:05:57
【问题描述】:
我正在处理一个系统,它会将任何意外错误以错误类型、消息和详细信息的字符串形式发回给我,例如:
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(),发现 this user's response in the PHP Manual 帮助我用两个分隔符而不是一个分隔符来分隔结果:
然后我需要更深入地研究代码,因为我想要 $key => $val 对,所以我遇到了this answer on 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 的错误消息
当我在字符串中插入一个随机错误并调用该函数时,它工作得非常好。但是,当我从服务器触发随机错误时,我开始遇到问题,特别是 Undefined offset 用于我的 list() 函数
PHP 错误
<br />
<b>Notice</b>: Undefined offset: 5 in <b>C:\xampp\htdocs\application\_backend\class\class.program.php</b> on line <b>238</b><br />
<br />
<b>Notice</b>: Undefined offset: 4 in <b>C:\xampp\htdocs\application\_backend\class\class.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.
[] =>
)
这与我在上面看到的错误相同。
我该如何解决这个问题?我在这里错过了什么?
【问题讨论】:
-
我只能想象调整
$string后$ready的内容实际上不能爆炸成6个项目......就像分隔符不匹配一样。你能在爆炸前把它们都 print_r() 来调试他们认为自己拥有的东西吗? -
@Randall 实际上我可以:
Error Type - Database Error Message - Error Executing Database Query. Error Detail - [Macromedia][SQLServer JDBC Driver][SQLServer]String or binary data would be truncated. -
@Randall 这将与顶部的错误相同
-
我在想
PHP_EOL认为的返回值,而不是$string中的内容,因此它只是没有用破折号 str_replaceing 它们? -
您使用的 API 可能不是用 PHP 编写的,因此它没有使用与 PHP 相同的换行符约定。
标签: php arrays error-handling