次のコードでセグメンテーションフォルトが発生するのはなぜですか?PHPのセグメンテーションフォルト?
<?php
$CNX = new mysqli('localhost','dbuser', 'dbpass', 'dbtest');
class DAO
{
var $stmt;
function DAO()
{
$this->stmt = $GLOBALS['CNX']->stmt_init();
}
function listing()
{
$this->stmt->prepare('SELECT * FROM any_table');
}
}
class Page
{
function go()
{
$d1 = new DAO();
$d2 = new DAO();
$d1->listing();
exit;
}
}
$tpl = new Page();
$tpl->go();
?>
追加メモ
1)私は2台の異なるLAMPサーバー上でこのコードを実行し、それらの両方は私のerror.logファイルにchild pid somenumber exit signal Segmentation fault (11)
のようなエラーが発生します。あるサーバでは、Ubuntu 10.04、Apache 2、Mysql 5、PHP 5.3.2-1ubuntu4.9を実行しています。別のサーバでは、Ubuntu 11.10、Apache 2、mysql 5、PHP 5.3.6-13ubuntu3.3を実行しています。 。
2)それは不思議ですが、$d2 = new DAO();
の行またはexit;
の行をコメントアウトすると、セグメンテーションの失敗はなくなります。
3)セグメンテーションフォールトが起こっている私は、準備されたステートメント
中から選択DBテーブルに関係なく発生しますか?私はとても不満です。私はこのセグメンテーション違反のために1日分の時間を失いました。誰もが何が起こっているのか知っていれば...、あなたはmysqliのモジュールのバグを見つけた
おかげ
行うための最善のことは、完全にSmartyのドロップすることです。不要なオーバーヘッドです。 * "ねえ、テンプレートエンジンであるPHPの上にテンプレートエンジンを追加してみましょう" *: ':rolleyes:' – NullUserException
あなたが見ているコードは、5年以内に存在する問題の単なる蒸留バージョンです古いソフトウェア。だから、数百ページのコードを書き直すことなく、すごく落とすことはできません。 – John
これは単なるテストですが、コンストラクタでは、グローバル変数をインポートしてからローカル変数に割り当てることができますか?多分、セグメンテーションがなくなるでしょう。それは単なるアイデアなので、保証はありません。 – hakre