在PHP RSHUTDOWN阶段调用zend_bailout导致zend_mm_heap corrupted问题

测试脚本如下:

1
2
3
<?php

date_default_timezone_set('Asia/Shanghai');

并且开启opcache

然后,我们编写如下代码:

1
2
3
4
5
PHP_RSHUTDOWN_FUNCTION(yasd) {
zend_bailout();

return SUCCESS;
}

接着,使用php-cgi来启动服务:

1
php-cgi -b 0.0.0.0:8000

然后,请求两次我们的脚本。第一次是正常的,第二次就会出现zend_mm_heap corrupted的问题。

并且,我发现,关闭opcache之后,这个错误就会消失。当然,我们还是不要在RSHUTDOWN阶段去调用zend_bailout