[PHP-users 24605] PHP4.0.6でparentを使うとSegmentation fault
Akira ODA
oden924 @ moon.e-com.ne.jp
2005年 2月 20日 (日) 04:09:53 JST
はじめまして。尾田といいます。
PHP4.0.6で末尾に添付したtest.php にアクセスするとApacheのエラーログに
[Sun Feb 20 03:05:33 2005] [notice] child pid 27328 exit signal Segmentation fault (11)
のようなログが吐き出され、Segmentation fault が発生します。
いろいろ試したところ、
1. クラスB の parent::func() を A::func() で置き換える。
2. test.php に require_once('a.php') を追加。
のどちらかの対処を行うことでSegmentation faultが発生しなくなりました。
で、一応解決したのですが、なぜこういうことになるのか理解できません。
原因が分かる方がいたらご教授願えませんでしょうか。
なお、apache-1.3.29 と 1.3.33 で確認しました。
# スタックトレースを取ったら
# #25159 0x00149514 in execute (op_array=0x9e61dbc) at ./zend_execute.c:1544
# のような行が延々と25,000行ほど続いていたので
# PHPのバグのような気もしますが・・・
以下ソースコードです。
a.php
<?php
class A
{
function func()
{
echo "A::func() called\n";
}
}
?>
b.php
<?php
require_once('a.php');
class B extends A
{
function func()
{
echo "B::func() called\n";
parent::func();
// A::func()
}
}
?>
c.php
<?php
require_once('b.php');
class C extends B
{
function func()
{
echo "C::func() called\n";
parent::func();
}
}
?>
test.php
<?php
// require_once('a.php');
require_once('c.php');
header('Content-type: text/plain');
$obj =& new C();
$obj->func();
?>
--
尾田 晃 <oden924 @ moon.e-com.ne.jp>
PHP-users メーリングリストの案内