1

コールドフュージョンで404または500エラーが発生したことを開発者にメールで送信するカスタムエラーページを作成しようとしています。また、電子メール内でエラー変数が示されていると便利です。

コールドフュージョンでエラーページを設定し、IIS(7)をポイントしました。

また、application.cfmファイルで、次のことを宣言しています。

<cferror type="exception" template="#name#">
<cferror type="request" template="#name#"> 
<cferror type="validation" template="#name#"> 
<cferror type="monitor" template="#name#"> 

私の問題は、エラーファイル内にCF呼び出しを含めることができないため、CFがそれらをストライプ化するように見えることです。

私は何か間違ったことをしていますか?

前もって感謝します!

4

3 に答える 3

6

以下の Travis のコメントによると、cferrorタグの使用は引き続きサポートされていますが、Application.cfm から Application.cfc に変換し (まだ使用していない場合)、onError代わりにメソッドを使用することをお勧めします。onErrorメソッドを使用し、すべての CFML 機能を使用できる場合、以下にリストしたすべての制限は適用されません。onError メソッドに関する ColdFusion 9 のドキュメントは次のとおりです。

エラー処理に関する詳細なセクション全体がColdFusion ドキュメントにあります。ただし、タグに関する特定の質問についてはcferror、エラーが発生したときに ColdFusion が実行できることには制限があり、それはエラーの種類にも依存することを認識する必要があります。以下は、このページからの抜粋です。

次の表に、エラー アプリケーション ページに適用されるルールと考慮事項を示します。

検証

  • CFML タグは使用できません
  • HTMLタグが使える
  • Error.InvalidFieldsError.validationHeader、およびError.validationFooter変数をシャープ記号 (#) で囲んで使用できます。
  • その他の CFML 変数は使用できません

リクエスト

  • CFML タグは使用できません
  • HTMLタグが使える
  • などの 9 つの CFML エラー変数Error.Diagnosticsを番号記号で囲むことで使用できます。
  • 他の CFML 変数は使用できません

例外

  • タグ、関数、変数を含む完全な CFML 構文を使用できます
  • 9 つの標準 CFML エラー変数と cfcatch 変数を使用できます。両方のタイプの変数の接頭辞としてまたは のいずれErrorかを使用しますcferror
  • 他のアプリケーション定義の CFML 変数を使用できます
  • CFML 変数を表示するには、cfoutput タグを使用します。


各例外タイプで使用可能なエラー変数に関するこのページ からの抜粋:

検証のみ

    error.validationHeader  Validation message header text.
    error.invalidFields     Unordered list of validation errors.
    error.validationFooter  Validation message footer text.

リクエストと例外

    error.diagnostics       Detailed error diagnostics from ColdFusion.
    error.mailTo            E-mail address (same as value in cferror.MailTo).
    error.dateTime          Date and time when error occurred.
    error.browser           Browser that was running when error occurred.
    error.remoteAddress     IP address of remote client.
    error.HTTPReferer       Page from which client accessed link to page where error occurred.
    error.template          Page executing when error occurred.
    error.generatedContent  The content generated by the page up to the point where the error occurred.
    error.queryString       URL query string of client's request.

例外のみ

    error.message           Error message associated with the exception.
    error.rootCause         The root cause of the exception. This structure contains the information that is returned by a cfcatch tag.
                            For example, for a database exception, the SQL statement that caused the error is in the error.RootCause.Sql variable.
                            For Java exceptions, this variable contains the Java servlet exception reported by the JVM as the cause of the "root cause" of the exception.
    error.tagContext        Array of structures containing information for each tag in the tag stack. The tag stack consists of each tag that is currently open.
    error.type              Exception type.

注: type = "exception" の場合、接頭辞 cferror を Error に置き換えることができます。たとえば、cferror.diagnostics、cferror.mailTo、cferror.dateTime などです。

于 2013-02-12T18:25:26.700 に答える
1

エラー ファイルの拡張子は .cfm ですか?

また、404 ごとに電子メールを送信すると、メール爆弾攻撃にさらされる可能性があります。Google Analytics などを追加して 404 をチェックする方がよいでしょう。500 エラーは、さまざまな問題が発生したことを意味する可能性があるため、CF はおそらく電子メールを送信しませんでした。

于 2013-02-12T17:53:10.570 に答える
1

この理由から、テンプレートを使用するのが最も正確です。例: dbc.cfm. dbc.cfm にメール送信コードを記述します。

<cftry>
        <cfquery name="GetData" datasource="#Application.ds#" dbtype="ODBC" username="#Application.UserName#" password="#Application.Password#">
            SELECT m.price
            FROM productvendorsmap m
            WHERE m.productid = <cfqueryparam cfsqltype="cf_sql_integer" value="#ProductId#">
            AND m.vendorid = <cfqueryparam cfsqltype="cf_sql_integer" value="#VendorIdd#">
        </CFQUERY>
        <cfcatch type="Database">
            **<cfinclude template="dbc.cfm">**
        </cfcatch>
    </cftry>
于 2013-02-14T14:09:32.137 に答える