php 自动加载指定函数中抛出异常乱码问题
昨天在德问看到一个问题,经过问题的描述,以及
@cx1934
的回答,我复现了那个乱码的问题,以下是复现过程,以及一些疑问:
相关问题
@php 诡异问题: 类找不到出现乱码
问题不好描述,只能贴出几段相关测试代码。
测试环境 WAMP5 Version 1.7.4 php 5.2.5
php.ini :
zlib.output_compression = On
详细代码如下(A):
spl_autoload_register(array('c','autoload'));
class a extends b{}
class c {
public static function autoload($className){
echo $className;
throw new Exception('xxx');
}
}
代码(B):
spl_autoload_register(array('c','autoload'));
//class a extends b{}
class c {
public static function autoload($className){
echo $className;
throw new Exception('xxx');
}
}
try{
c::autoload('b');
}catch(Exception $e) {
echo $e->getMessage();
}
代码(C):
spl_autoload_register(array('c','autoload'));
class a extends b{}
class c {
public static function autoload($className){
ini_set('zlib.output_compression','Off');
echo $className;
throw new Exception('xxx');
}
}
代码(D)
spl_autoload_register(array('c','autoload'));
class a extends b{}
class c {
public static function autoload($className){
header("Content-Encoding: gzip");
echo $className;
throw new Exception('xxx');
}
}
代码(E)
spl_autoload_register(array('c','autoload'));
class a extends b{}
class c {
public static function autoload($className){
echo $className;
}
}
1,以上代码共同点就是(除B),都无法catch autoload函数抛出的异常;
2,通过 A 与 B 比较,只有spl_autoload_register()函数触发调用的 autoload() 方法 抛出异常才会 乱码;说明是spl_autoload_register()问题。
3,通过 A 与 C,D比较,说明是gzip的问题。
4,通过 A,C,D 与 E 比较,说明是 throw new Exception('xxx');
以上最核心的问题其实还没有找到。请大家运行上边的代码,找到问题的真正原因,更重要的是详细说明下是什么导致的。
恋文★86
12 years, 6 months ago
Answers
我提的那个问题找到 php5.2.x spl_autoload 对应的方法中不能 throw 异常
不知道 5.3是不是修改了 擦
https://bugs.php.net/bug.php?id=45656
传说D一日君
answered 12 years, 6 months ago