チケット #7994

データベースのコネクション失敗時の処理
登録: 2006-02-06 16:12 最終更新: 2006-07-04 11:16

報告者:
担当者:
(del#8225)
チケットの種類:
状況:
オープン [担当者決定済み]
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
不正
ファイル:
なし

詳細

Xoops2系全

データベースのコネクション失敗したときでも

getDatabaseConnection
取得の失敗判定してはいるが、処理を中断せずにエラー
if (!$instance->connect())
{
trigger_error
("Unable to connect to database", E_USER_ERROR);
}

とだけしているが
xoops2.0.xでは
で次の処理 config 取得などの処理にいくのは
失敗して当然だが

$xoopsDB =& XoopsDatabaseFactory::getDatabaseConnection
();
とか
$db =& Database::getInstance();

失敗して当然なのに、コネクションが出来る前提でほとんど組ま
れているので

次の処理へ進んで半端に
処理がチグハグに継続されてしまう可能性がある方が
サイトにとって良くないと思います
キッパリ中断する方が影響が少ないのではないかと思います

チケットの履歴 (4 件中 3 件表示)

2006-02-06 16:46 更新者: (del#8225)
  • 担当者(未割り当て) から nobunobu に更新されました
  • 解決法なし から 不正 に更新されました
コメント
Logged In: YES
user_id=8225

trigger_error("Unable to connect to database", E_USER_ERROR);
をかけることによって、
class/errorhandler.php内の、function handleError($error)にて
E_USER_ERROR場合は強制終了するように、すでになっていると思い
ます。
なにか次の行に進んでいるような形跡があればお知らせください。
2006-04-06 17:21 更新者: toshimitsu
コメント
Logged In: YES
user_id=6033

nobunobu さんへ
(さっき投稿がエラーになったので再投稿)
class/errorhandler.php内の判定処理には気が付いてませんでした。

ですが
piCalのように途中でerrorhandlerを切ってしまうものがあるし
errorhandlerに関係なく止めてしまう方がよいとは思います
2006-04-25 08:39 更新者: toshimitsu
コメント
Logged In: YES
user_id=6033

xoops2.0.14 rc1 を確認するついで見たのですが
class/errorhandler.php内の、function handleError($error)にて
では、
PHPデバグをONのときにしか、動作は中断されません
判定の順番がおかしいです
-------------------

function handleError($error)
{
if (($error['errno'] & error_reporting()) != $error
['errno']) {
return;
}
$this->_errors[] = $error;
if ($error['errno'] == E_USER_ERROR) {
$this->_isFatal = true;
exit();
}
}
-----------------
変更するとするとこのこの順でないと
意図した動きにはならないはずです


function handleError($error)
{
if ($error['errno'] == E_USER_ERROR) {
$this->_isFatal = true;
exit();
}
if (($error['errno'] & error_reporting()) != $error
['errno']) {
return;
}
$this->_errors[] = $error;
}
-------------------------------

どちらにしても、多くの人が利用しているpical を使用している場合は
ブロックを表示するだけでも、
途中でerrorhandlerはキャンセルされるはずなので
これにたよりすぎるのはいかがと思います
止めた方がよいところは止める方がベターだと思います
2006-07-04 11:16 更新者: toshimitsu
コメント
Logged In: YES
user_id=6033

function handleError($error)にて
error_reporting(0)の時は強制終了はしないのではないでしょうか?
つまりデバグをONにしたときにしか強制終了はしないというふうになっ
ていると思います

やっぱり止めたいなら判定処理の順番がおかしいと思う
------------------
/**
* Handle an error
*
* @param array $error Associative array containing
error info
* @access public
* @return void
*/
function handleError($error)
{
if ($error['errno'] == E_USER_ERROR) {
$this->_errors[] = $error; //エラーメッセージを表
示のため
$this->_isFatal = true;
exit();
}
if (($error['errno'] & error_reporting()) != $error
['errno']) {
return;
}
$this->_errors[] = $error;
}
--------------------

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする