php while循环引起的PHP分段错误
我发现了一种造成 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
维基百科:分段错误
一些研究表明,某些 PHP 扩展可能无法正常运行,或者可能彼此相处不好。它还可能取决于服务器或服务器配置。
如果您同时使用 XDebug 和 Zend Debugger,则可能会导致此问题。
起初我认为与 die() 语句一起使用的 while 循环可能是原因的一部分。我很好奇这是否也会导致分段错误:
如果不是,则可能就是您如何一起使用 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:
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.
这似乎与 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.