2016年09月15日
DynamicMTMLのデバッグについて
DynamicMTML のインストール、セットアップ段階で躓くケースで、PowerCMSサポートで行っている障害原因の特定方法について紹介します。エンジニア向け記事です。
1.基本的なFAQに目を通し、問題がないか確認する
以下、本番運用環境ではなく、検証環境で行ってください。
2. DebugMode を指定する
ダイナミックパブリッシングエラーテンプレートに <mt:ErrorMessage escape="html">が記載されていることを確認した上で、環境変数 DebugMode に「1」「2」などを指定してください。
<mt:ErrorMessage escape="html">が詳細なメッセージを表示するようになります。エラーを発生させているファイルや箇所など。
"<!-- file: $errfile; line: $errline; code: $errno -->"
3. .mtview.phpに処理が渡っているか確認する
ダイナミックパブリッシングエラー以前のエラーの場合(画面が真っ白になるなど)、まず、ブログ・パス直下に生成されている .mtview.php ファイルに処理が渡っているか確認します。
<?php echo 1; // この行を追加 exit(); // この行を追加 ## DynamicMTML generated this part; don't remove this line! ## // DynamicMTML (C) 2010-2013 Alfasado Inc. // ini_set( 'memory_limit', '16M' ); //2.11 $blog_id = 1;
画面に「1」と表示されれば .mtview.phpに正しく処理が渡っています。
※ .mtview.phpは各ブログパスに設置する必要があります。上位ウェブサイトにしか.mtview.phpが存在しない場合(ウェブサイト・パス配下にブログを配置している場合など)、コンテキストが正しくセットされない可能性があります。
.mtview.phpに処理が渡っていない場合、.htaccess もしくは Web.config の設定を確認ください。
4. error_reportingを設定し、display_errors を Onにする
.mtview.php の先頭に下記を追記します。
error_reporting(E_ALL); ini_set('display_errors', 'On');
5. デバッグコードを入れてどこまで処理が進んでいるかを見る
1〜4までで問題が解決しなかった場合、処理の各箇所に echo や var_dump()などでディスプレイに値を返しながら処理のどこまで進んでいるかを把握してエラーの発生箇所を特定します。
.mtview.php は処理かが終わると処理を mt/addons/DynamicMTML.pack/php/dynamicmtml.run.php に委ねますので、dynamicmtml.run.phpファイルの中に echo や var_dump()などを入れ、どこまで進行しているかを把握します。
<?php $plugin_path = dirname( __File__ ) . DIRECTORY_SEPARATOR; require_once( $plugin_path . 'dynamicmtml.util.php' ); require_once( $plugin_path . 'class.dynamicmtml.php' ); if (! isset( $mt_dir ) ) $mt_dir = dirname( dirname( dirname( $plugin_path ) ) ); require_once( $mt_dir . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'MTUtil.php' ); if (! isset( $mt_config ) ) $mt_config = $mt_dir . DIRECTORY_SEPARATOR . 'mt-config.cgi'; global $mt; global $ctx; $ctx = NULL; echo 1 . '<br>'; // 行を追加 $app = new DynamicMTML(); $app->configure( $mt_config ); echo 2 . '<br>'; // 行を追加 $no_database = FALSE; $dynamic_config = $app->config; if (! $app->config( 'Database' ) || (! isset( $blog_id ) ) ) { $no_database = TRUE; $app->stash( 'no_database', 1 ); require_once( $plugin_path . 'mt.php' ); $mt = new MT(); } ... echo '<pre>'; // 行を追加 var_dump( $mt ); // 行を追加 ...
dynamicmtml.run.php の中では処理内容に応じて他のphpファイルに処理が渡ります。主要な処理は下記のファイルで行われています。
- mt/addons/DynamicMTML.pack/php/dynamicmtml.run.php
- mt/addons/DynamicMTML.pack/php/mt.php
- mt/addons/DynamicMTML.pack/php/class.dynamicmtml.php
エラー箇所が特定でき、解決方法がわからない場合は PowerCMSサポートまでお問い合わせください。
コメントを投稿する