Я обнаружил способ сделать 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%
Как вы можете видеть, это происходит не каждый раз. Php кэширование?
php5 5.2.10.dfsg.1-2ubuntu6.1
Википедия: ошибка сегментации
Немногие исследования указывают на то, что некоторые расширения PHP могут играть не очень хорошо или не могут играть хорошо друг с другом. Он также может зависеть от сервера или конфигурации сервера.
Если вы одновременно используете оба XDebug и Zend Debugger, они могут вызвать это.
Сначала я подумал, что возможно, цикл while, используемый с выражением die (), может быть частью причины .. Мне любопытно узнать, вызывает ли это также и ошибку сегментации:
while (!$fault) { $fault=check_fault_function(); } if ($fault) { die('dd'); }
Если нет, это может быть то, как вы используете пока и умереть вместе. Как вы знаете, в то время как (1) {} представляет собой бесконечный цикл … (ваш сервер может не знать, как распределять память для бесконечных процедур), поэтому, если вы не пытаетесь вызвать сбои, это, как правило, плохая практика.
Это, похоже, связано с известной ошибкой в источнике PHP. Это было исправлено в багажнике PHP, и похоже, что он был выпущен некоторое время вокруг выпуска 5.2.11. Подробнее см. Здесь и здесь .