php while循环引起的PHP分段错误

Joe*_*nsn 11 php segmentation-fault

我发现了一种制作php segfault的方法,我对发生的事情有点好奇.也许有人可以帮我解释一下?

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%    
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,每次都不会发生这种情况.Php缓存?

php5 5.2.10.dfsg.1-2ubuntu6.1
Run Code Online (Sandbox Code Playgroud)

Tal*_*tia 4

维基百科:分段错误

一些研究表明,某些 PHP 扩展可能无法很好地发挥作用,或者彼此之间可能无法很好地发挥作用。它还可能取决于服务器或服务器配置。

如果您同时使用 XDebug 和 Zend Debugger,则可能会导致此问题。

起初我认为与 die() 语句一起使用的 while 循环可能是原因的一部分。我很想知道这是否也会导致分段错误:

while (!$fault) { 
  $fault=check_fault_function();
  }
if ($fault) { die('dd'); }
Run Code Online (Sandbox Code Playgroud)

如果不是,这可能就是您使用 while 和 die 的方式。如您所知, while(1) {} 是一个无限循环...(您的服务器可能不知道如何为无限例程分配内存),因此除非您试图导致崩溃,否则这通常是不好的做法。