3

CakePHP でエラーが表示されないようにするために考えられることはすべて試しました。CakePHP の取扱説明書を確認し、インターネットとスタックオーバーフローで「CakePHP のエラー報告をオフにする」や「CakePHP のデバッグ モードをオフにする」などのフレーズを検索しました。以下は、まだ表示されているエラーの説明と、CakePHP でこれらのエラーを隠そうとしたことです。

まだ発生しているエラー

  • エラー 1: エラーが表示されているかどうかをテストするために、Controller クラスの 1 つで変数を意図的に誤って宣言しました。

  • エラー 2: エラーが表示されるかどうかを確認するために、URL に意味不明な文字列を入力してみました。Cake から「Missing Controller」エラーが発生します。

エラーが表示されないようにするために私が試みたこと

  • Configure::write('debug', 0); (ゼロに編集) in \app\Core.php

  • error_reporting (0); (行を追加) \app\Config\bootstrap.php

  • Configure::write は \app\Core.php の配列に 'level' キーを持っているので、"E_ALL & E_DEPRECATED" から 0 に変更しました。それから空白にしてみました。

  • エラーをオフにするための一連のコマンドを含む php.ini ファイルを public_html に追加しました。また、このファイルを削除して、干渉していないことを確認しました。

  • \lib\Cake\Utility\Debugger.php の ___construct() のセクションをコメントアウトしました (これにより、URL に意味不明な文字列が入力されたときに表示されるページのタイトル タグからエラー メッセージが削除されましたが、コントローラの欠落エラーは削除されませんでした)。ちなみにエラーメッセージはHTMLタイトルに入れていました。それは変だ。

  • コメントアウトされた echo $self->outputError($data); \lib\Cake\Utility\Debugger.php の showError で

  • マニュアルの「展開」ページを再確認すると、「デバッグ」ページが参照されました。そのページでは、「Configure::debug」の設定について説明しましたが、これは「Configure::write('debug', 0);」とは少し異なる書き方になっています。ということでバリエーションを試してみました。

  • php を含むすべてのディレクトリで「error_reporting(」および「ini_set(」) というフレーズを検索して、どこかでエラーを有効にして忘れていないことを確認しました。

私が試したすべてのことにもかかわらず、これらがまだ表示されている理由、またはそれらをオフにするためにできることを誰かが知っているなら、私はそれを非常に感謝しています.

ありがとう。

4

2 に答える 2

2

マークの提案を試してみましたが、うまくいきました。Cake のインストール全体を "Configure::write('debug'" で検索したところ、デバッグをオンにするための行が大量に見つかりました。ただし、これらのほとんどは、CakePHP の公式サイトからダウンロードした元のファイルに存在していました。実験として、Cake のインストールのコピーを作成し、debug を 0 より高く設定するすべてのインスタンスを変更し、それが機能しまし。 CakePHP を削除し、新しいコピーをダウンロードして置き換えます。

新しい core.php を構成した後、見つからないコントローラー エラーが見つかりませんエラーに置き換えられ、テスト目的で意図的に発生させた解析エラーが内部サーバー エラーに置き換えられました。内部サーバーエラーを表示することが想定されていることかどうかはわかりません...しかし、デバッグ設定を編集した後に動作が変更され、ファイルパスが明らかになりません。だから、本来あるべき姿で動いていると思います。

これを解決するのを手伝ってくれたマークの功績を認めたいと思いますが、彼はコメントを投稿しただけです。

于 2013-02-14T18:26:04.987 に答える
1

u にはいくつかのオプションがあると思います:

  1. エラーを構成する

    どうぞ app/Config/core.php

    Configure::write('Error', array( 'handler' => 'ErrorHandler::handleError', 'level' => E_ALL & ~E_DEPRECATED, 'trace' => true )); エラー ハンドラーを構成する場合、次の 5 つの組み込みオプションがあります。

handler - callback - エラーを処理するためのコールバック。これは、無名関数を含む任意の呼び出し可能な型に設定できます。

level - int - キャプチャしたいエラーのレベル。組み込みの php エラー定数とビットマスクを使用して、関心のあるエラーのレベルを選択します。

trace - ブール値 - ログ ファイルにエラーのスタック トレースを含めます。スタック トレースは、各エラーの後にログに含まれます。これは、エラーが発生している場所/時期を見つけるのに役立ちます。

consoleHandler - callback - コンソールでの実行時にエラーを処理するために使用されるコールバック。未定義の場合、CakePHP のデフォルト ハンドラが使用されます。

  1. 独自のエラー ハンドラを作成する

    // app/Config/core.php 内

    Configure::write('Error.handler', 'AppError::handleError');

// app/Config/bootstrap.php 内

`App::uses('AppError', 'Lib');`

// app/Lib/AppError.php 内

class AppError { public static function handleError($code, $description, $file = null, $line = null, $context = null) { echo 'There has been an error!'; } }

このクラス/メソッドは、「エラーが発生しました!」と出力します。エラーが発生するたびに。エラー ハンドラは任意のコールバック タイプとして定義できるため、PHP5.3 以降を使用している場合は無名関数を使用できます。

Configure::write('Error.handler', function($code, $description, $file = null, $line = null, $context = null) {
    echo 'Oh no something bad happened';
});

また、詳細についてはこちらをご覧ください

于 2013-02-14T10:40:39.447 に答える