在使用php的eval解析代码时,会出现二种极端的可能.
第一种是解析失败,就会导致输出500 Internal Server Error;如果同时这里使用jquery获取响应话,会出现error和success都无法捕捉到内容,在firebug中会看到这个请求是红的;
对于这种情况可以使用下面的代码来进行提示,新的php版本好像在这种情况下,并不会输入500 Internal Server Error的.而在旧的版本,使用try+catch和@都无法防止输出500 Internal Server Error;
会在firebug中看到响应头如下:
响应头信息格式化头信息
HTTP/1.1 500 Internal Server Error
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.3.2-1ubuntu4.15
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
X-Cacheable: NO: obj.status
X-Cacheable-status: 500
Content-Length: 2391
Date: Mon, 06 Aug 2012 07:33:16 GMT
X-Varnish: 630534718
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS
//这种情况如 array((); 这样的拼写就会导致.
if (false === @eval('@$obj = ' .$row['post'].';') ) {
echo "<!--解析出错id(防止在php4下面解析错误导致exit script;在这里输出id以备查看出错rec id用,有一种是只是导致服务器出错的header状态,还有一种是直接终止代码):{$row['_id']}-->";
}
第二种情况是解析出错,直接终止解析代码;
在这里没有遇到,就没有例子了.