new Zend_Date()で[notice] child pid xxxx exit signal Segmentation fault (11)

| | コメント(0) | トラックバック(0)
結論からいうと、セッションに入れたZend_Dateオブジェクトを引数にZend_Date()のコンストラクタを呼ぶとSegmentation faultが起きるっぽい。そんなことをする必要があるかどうかは別にして。

ある日、画面をポチポチっと遷移してたら画面が真っ白になった。
アプリログもapacheログもでてなくて、困ったなーと思ったらバーチャルホストで指定しているログじゃなくて、おおもとの/usr/local/apache/logs/error.logに
[notice] child pid 6191 exit signal Segmentation fault (11)
っていうのがたくさんでてた。



 エラーがでる原因のコードを探るべく、1行1行確認していき、とうとう問題の一行をつきとめた。
$new->birthday = new Zend_Date($r['birthday']);
$rはセッションの中身。

なぜこのコードがダメなのかわからなくて、gdbつかってデバッグしたりしたけど、結局どうしていいかわからなかった。

で、いろいろ見ていくうちに、セッションファイルの中身を見てたら
:"birthday";O:9:"Zend_Date":8:{s:18:"^@Zend_Date^@_locale";s:2:"ja";s:22:"^@Zend_Date^@_fractional";i:0;s:21:"^@Zend_Date^@_precision";i:3;s:36:"^@Zend_Date_DateObject^@_unixTimestamp";s:10:"1234807235";s:31:"^@Zend_Date_DateObject^@_timezone";s:10:"Asia/Tokyo";s:29:"^@Zend_Date_DateObject^@_offset";i:-32400;s:34:"^@Zend_Date_DateObject^@_syncronised";
こんな感じに、birthdayがもともとZend_Dateオブジェクトなことに気づく。Zend_DateのコンストラクタはZend_Dateオブジェクトも取るので、それ自体は問題ないのだけど、なーんか。最後のZend_Date_DateObject^@_syncronisedあたりが気になったのと、そもそもZend_Date()で再生成する必要性もないので、
$new->birthday = new Zend_Date($r['birthday']);

$new->birthday = $r['birthday'];
に変えたら直った。

その後にすごくシンプルに、Zend_Date生成⇒セッションに入れる⇒セッションのZend_Dateオブジェクトを元にZend_Dateを生成という3ステップを書いたら再現した。

ちなみに、わかる範囲だと以下の環境で発生。
PHP 5.2.6、5.2.8 + ZF1.7.2、1.7.4 + CentOS5(Windowsでは起きなかった)

バグ・・・なのかな?




トラックバック(0)

このブログ記事を参照しているブログ一覧: new Zend_Date()で[notice] child pid xxxx exit signal Segmentation fault (11)

このブログ記事に対するトラックバックURL: http://hirop0164.s326.xrea.com/mt/mt-tb.cgi/263

コメントする


画像の中に見える文字を入力してください。

ブックマーク

はてなブックマークに追加 Yahoo!ブックマークに登録 del.icio.us に登録 ライブドアクリップに追加 Google Bookmarks に追加

Ajax: 2009年5月: 月別アーカイブ

このブログ記事について

このページは、ぴろしが2009年2月17日 03:06に書いたブログ記事です。

ひとつ前のブログ記事は「smartyでよく使いそうな自作プラグイン3-新着にNew!をつける」です。

次のブログ記事は「Zend Frmaeworkで携帯サイトを作る(PCサイトを作った後で)6-かんたんログイン(自動ログイン)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。