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

发布于 2024-08-11 17:29:32 字数 1400 浏览 4 评论 0原文

我发现了一种造成 php 段错误的方法,我对发生的事情有点好奇。也许有人可以为我解释一下?

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%    

如您所见,这种情况并非每次都会发生。 PHP 缓存?

php5 5.2.10.dfsg.1-2ubuntu6.1

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

骄兵必败 2024-08-18 17:29:32

维基百科:分段错误

一些研究表明,某些 PHP 扩展可能无法正常运行,或者可能彼此相处不好。它还可能取决于服务器或服务器配置。

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

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

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

如果不是,则可能就是您如何一起使用 while 和 die 的原因。如您所知, while(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.

酒与心事 2024-08-18 17:29:32

这似乎与 PHP 源代码中的一个已知错误有关。它已在 PHP 主干中修复,看起来是在 5.2.11 版本前后推出的。请参阅此处此处了解详细信息。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文