PHP segmentation fault caused by php while loop

徘徊边缘 提交于 2019-12-08 15:28:55

问题


I discovered a way to make php segfault, and I'm a bit curious about what's happening. Maybe someone can explain this for me?

joern@xps:..com/trunk5/tools/nestedset> cat > while.php
<?php
while(1){
        die('dd');
}
?>
^C
0 joern@xps:..com/trunk5/tools/nestedset> php -f while.php   
ddzsh: segmentation fault  php -f while.php
0 joern@xps:..com/trunk5/tools/nestedset> php -f while.php
dd%                                                                                                                                                                                 
0 joern@xps:..com/trunk5/tools/nestedset> php -f while.php
dd%                                                                                                                                                                                 
0 joern@xps:..com/trunk5/tools/nestedset> php -f while.php
ddzsh: segmentation fault  php -f while.php
0 joern@xps:..com/trunk5/tools/nestedset> php -f while.php
ddzsh: segmentation fault  php -f while.php
0 joern@xps:..com/trunk5/tools/nestedset> php -f while.php
dd%                                                                                                                                                                                 
0 joern@xps:..com/trunk5/tools/nestedset> php -f while.php
dd%    

As you can see, it doesn't happen every time. Php caching?

php5 5.2.10.dfsg.1-2ubuntu6.1

回答1:


Wikipedia: Segmentation Fault

A little bit of research indicates that some PHP extensions may not play nice, or may not play nice with each other. It can also depend on the server, or the server configuration.

If you are using both XDebug and Zend Debugger loaded at the same time it can cause this.

At first I thought possibly the while loop used with a die() statement might be part of the cause.. I am curious to know if this also causes a segmentation error:

while (!$fault) { 
  $fault=check_fault_function();
  }
if ($fault) { die('dd'); }

If not it may be just how you are using while and die together. As you know while(1) {} is an infinite loop... (your server may not know how to allocate memory for infinite routines) so unless you are trying to cause crashes this is normally bad practice.




回答2:


This appears to be related to a known bug in the PHP source. It's been fixed in the PHP trunk, and it looks like it was rolled out some time around the 5.2.11 release. See here and here for details.



来源:https://stackoverflow.com/questions/1763334/php-segmentation-fault-caused-by-php-while-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!