.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
12 人のユーザが現在オンラインです。 (12 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 12

もっと...

.
.リンク集

メイン
   インストール・セットアップ(Install,Setup)
     Notice エラーを表示させないようにする
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hide99
投稿日時: 2007-9-19 22:02
一人前
登録日: 2007-7-2
居住地:
投稿: 106
Notice エラーを表示させないようにする
cakephp はどういうわけか、

php.ini、.htaccessなどで
error_reporting を 表示させないようにしてもエラーが表示されてしまいます。

特に なのが Noticeエラー。変数を初期化していないと毎回のようにエラーになります。しかもこのエラーは一般的なレンタルサーバーでは表示されないように指定されています。

そこで、Noticeエラーのみ表示させない方法を考えてみました。

○cakephp1.1 の場合

( cake/libs/configure.php ) のファイルの130行目から140行目あたりの error_reporting を下記URLを参考に変更すれば表示されなくなります。

http://de.php.net/error_reporting

を参考に変更すればエラーレベルを設定できます。

つづいて、

○cakephp1.2 の場合

これは探すのに時間かかってしまいました。
cake/libs/debugger.php の 125 から 147行目を下記のようにすればNoticeエラーが発生しなくなります。


<?php
switch ($code) {
    case 
E_PARSE:
    case 
E_ERROR:
    case 
E_CORE_ERROR:
    case 
E_COMPILE_ERROR:
        
$error 'Fatal Error';
        
$level LOG_ERROR;
    break;
    case 
E_WARNING:
    case 
E_USER_WARNING:
    case 
E_COMPILE_WARNING:
    case 
E_RECOVERABLE_ERROR:
        
$error 'Warning';
        
$level LOG_WARNING;
    break;
    case 
E_NOTICE:
        
$error 'Notice';
        
$level LOG_NOTICE;
    break;
    default:
        return 
false;
    break;
}
?>



を Notice エラーを発生させなくするには


<?php
switch ($code) {
    case 
E_PARSE:
    case 
E_ERROR:
    case 
E_CORE_ERROR:
    case 
E_COMPILE_ERROR:
        
$error 'Fatal Error';
        
$level LOG_ERROR;
    break;
    case 
E_WARNING:
    case 
E_USER_WARNING:
    case 
E_COMPILE_WARNING:
    case 
E_RECOVERABLE_ERROR:
        
$error 'Warning';
        
$level LOG_WARNING;
    break;
/*
    case E_NOTICE:
        $error = 'Notice';
        $level = LOG_NOTICE;
    break;
*/
    
default:
        return 
false;
    break;
}
?>



のようにコメントアウトすることでエラーを表示させなくすることが可能です。
asaoki
投稿日時: 2007-9-20 9:09
Baker スタート
登録日: 2007-1-15
居住地:
投稿: 2
Re: Notice エラーを表示させないようにする
ちゃんと検証していないのですが、
この方法とapp/config/core.phpの

<?php
<?php
/**
 * CakePHP Debug Level:
 *
 * Production Mode:
 *      0: No error messages, errors, or warnings shown. Flash messages redirect.
 *
 * Development Mode:
 *      1: Errors and warnings shown, model caches refreshed, flash messages halted.
 *      2: As in 1, but also with full debug messages and SQL output.
 *      3: As in 2, but also with full controller dump.
 *
 * In production mode, flash messages redirect after a time interval.
 * In development mode, you need to click the flash message to continue.
 */

    
define('DEBUG'2);
?>


の設定を1や0に変更するのとでは何か違うんでしょうか?
hide99
投稿日時: 2007-9-20 13:39
一人前
登録日: 2007-7-2
居住地:
投稿: 106
Re: Notice エラーを表示させないようにする
たしか、DEBUGの数字を変更するだけですと

WARNINGエラーも表示されなくなったするので、
(画面が真っ白で止まる)開発に影響が出てしまいます。

あと、SQL情報が出なくなったりしますので。

開発に特別影響の無い Noticeエラーのみを外すには DEBUGの数値を変更するだけではうまくいかないですね。

よって直接書き換えるのがベストだと思います。
hide99
投稿日時: 2007-9-20 15:03
一人前
登録日: 2007-7-2
居住地:
投稿: 106
cakephp1.2の場合の Noticeエラー非表示
07/12/31 編集

方法を書いておきます。
cakephp1.2の場合

cake/basics.php 768行目あたりを


<?php
if (Configure::read() > 0) {
?>



の一行を下記に変更


<?php
//コンフィグでバグを表示する場合で、 しかも notice 以外のエラー場合に表示させる
        
if (Configure::read() > && !preg_match('/Notice/',$var)) {
?>



これで notice エラーが表示されなくなる。
hide99
投稿日時: 2008-1-6 23:22
一人前
登録日: 2007-7-2
居住地:
投稿: 106
Re: cakephp1.2の場合の Noticeエラー非表示
先輩方、

やっぱりどの方法を試しても cakephp1.2 だと view で notice エラーがでたり、コントローラーで notice エラーが出たり、、、。

どこでerror レベルを変えているのかいまいちつかめません。

なぜ notice を消したいかといいますと

$hoge の値が空の場合

○ error_reporting レベル が notice も表示する場合


<?php
echo $hoge;
//Notice:・・・エラー発生
?>



とするとNoticeエラーが出ます。

○ error_reporting レベル が notice は表示しない場合


<?php
echo $hoge;
//Notice:・・・エラーは発生しません!
?>



とNotice エラーは発生しません。

cakephp の話題からずれるかもしれませんが、みなさんはどうやってプログラム作ってますか?

もちろん、


<?php
if(isset($hoge)){ echo $hoge;}
?>



とやったり、


<?php
$hoge 
'';
echo 
$hoge;
?>



とやればエラーは出ないと思うのですが・・・。

みなさんは変数を初期化してからプログラムされているのでしょうか。

もしくはerror_reportingレベルの変え方をご存知の方教えてください。

yando
投稿日時: 2008-1-7 8:34
一人前
登録日: 2006-8-7
居住地:
投稿: 99
Re: cakephp1.2の場合の Noticeエラー非表示
推測ですがnoticeは開発時には出力「すべき」という事なのだと思います。
たしかに変数の未定義だけを考えれば出力する必要はないかもしれませんが、Modelから取得したデータの指定方法が間違っている場合や廃止予定のメソッドを利用した場合などにもnoticeが出ます。

これらの情報については確認した上で正しい実装を行うか、無視するというのが本来の対処でしょう。
実際に公開する場合はDEBUGを0にしてメッセージの表示を全て抑止します。

ちなみに私はNoticeも一切出ないように実装するようにしています。
そのほうがバグを作りにくいのと、運用時の問題に気が付きやすいからですね。
hide99
投稿日時: 2008-1-7 19:36
一人前
登録日: 2007-7-2
居住地:
投稿: 106
Re: cakephp1.2の場合の Noticeエラー非表示
yandoさん

ありがとうございます!

心を入れ替え、 notice エラーも表示させないような良いプログラムを書いていこうと思います
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .