Ошибка сегментации PHP, вызванная php while loop
Я нашел способ сделать php segfault, и мне немного любопытно, что происходит. Может быть, кто-то может объяснить это мне?
[email protected]:..com/trunk5/tools/nestedset> cat > while.php
<?php
while(1){
die('dd');
}
?>
^C
0 [email protected]:..com/trunk5/tools/nestedset> php -f while.php
ddzsh: segmentation fault php -f while.php
0 [email protected]:..com/trunk5/tools/nestedset> php -f while.php
dd%
0 [email protected]:..com/trunk5/tools/nestedset> php -f while.php
dd%
0 [email protected]:..com/trunk5/tools/nestedset> php -f while.php
ddzsh: segmentation fault php -f while.php
0 [email protected]:..com/trunk5/tools/nestedset> php -f while.php
ddzsh: segmentation fault php -f while.php
0 [email protected]:..com/trunk5/tools/nestedset> php -f while.php
dd%
0 [email protected]:..com/trunk5/tools/nestedset> php -f while.php
dd%
Как вы можете видеть, это происходит не каждый раз. Php-кеширование?
php5 5.2.10.dfsg.1-2ubuntu6.1
Ответы
Ответ 1
Википедия: ошибка сегментации
Немного исследований показывает, что некоторые расширения PHP могут играть не очень хорошо или не могут играть хорошо друг с другом. Он также может зависеть от сервера или конфигурации сервера.
Если вы одновременно загружаете как XDebug, так и Zend Debugger, это может привести к этому.
Сначала я подумал, что возможно, цикл while, используемый с выражением die(), может быть частью причины.. Мне любопытно узнать, вызывает ли это также и ошибку сегментации:
while (!$fault) {
$fault=check_fault_function();
}
if ($fault) { die('dd'); }
Если нет, возможно, именно так вы используете время и умереть вместе. Как вы знаете, в то время как (1) {} представляет собой бесконечный цикл... (ваш сервер может не знать, как распределять память для бесконечных процедур), поэтому, если вы не пытаетесь вызвать сбои, это, как правило, плохая практика.
Ответ 2
Это, похоже, связано с известной ошибкой в источнике PHP. Он был исправлен в багажнике PHP, и похоже, что он был выпущен некоторое время вокруг выпуска 5.2.11. Подробнее см. здесь и здесь.