2011年12月02日
DynamicMTML のトラブルシューティング
DynamicMTML についてよく見かけるエラーのケースなどを紹介します。
404 Not Found ページが表示される
ダイナミックパブリッシングのページにアクセスすると「404 Not Found」が返ってくる。
- 原因1
- 動作に必要なファイル/ディレクトリが存在しない
- 対策1
- 下記が存在するか確認します
- .htaccess ファイル
- mtview.php (.mtview.php) ファイル
- templates_c ディレクトリ
- 原因2
- 設置された .htaccess が動作していない
- 対策2
- .htaccess が動作するか確認します。
利用可能なディレクティブにもよりますが、リダイレクトが可能であれば下記例でGoogle へアクセスが転送されると思います。
Redirect / http://www.google.co.jp/
PHPのソースが表示される
(静的)ダイナミックパブリッシングを利用した際に PHP のソースコードが表示される。
- 原因
- PHP が動作していない
- 対策
- PHP が動作するかサーバの設定などを確認します
異なるパラメータでアクセスした際、前回アクセス時の内容が表示される
パラメータの内容によって表示結果が変わる設定で、パラメータを変えても同じ結果が表示される。
- 原因
- ダイナミックパブリッシングのキャッシュ機能が効いている
- 対策
- ウェブサイト/ブログの全般設定画面で「キャッシュする」のチェックを外して保存する
「ページが見つかりません。 An error occurs」と表示される
(静的)ダイナミックパブリッシングのページにアクセスすると下記のメッセージが表示される。
- 原因
- 何らかの要因によって「ダイナミックパブリッシングエラー」システムテンプレートの内容が出力されている
この場合、下記の操作を行う事でエラーの原因を絞り込む事ができます。
- mt-config.cgi に環境変数
DebugMode
を記述します。DebugMode 1
- 再度エラーページへアクセスします。
- 「An error occurs」と表示されていた部分のメッセージが変化しているか確認します。
「An error occurs」が別のメッセージに変化したら、そのメッセージの内容に対して何らかの対策を行ってください。 下記にエラーメッセージ例の一部を紹介します。
- エラーメッセージの内容
mktime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead
- 原因
- php.ini に date.timezone の指定がされていない
- 対策
- php.ini で date.timezone の設定を行ってください
参考: PHP: 実行時設定 - Manualdate.timezone = Asia/Tokyo
- エラーメッセージの内容
is_readable() [<a href='function.is-readable'>function.is-readable</a>]: open_basedir restriction in effect. File(/plugins/block.mtblogname.php) is not within the allowed path(s): (/tmp)
- 原因
- ダイナミックパブリッシングの動作に必要な PHP ファイルを読み込めない
- 対策
-
- php.ini の設定で open_basedir が指定されている場合は設定を解除するか、設定を変更します
- PHP ファイルのパーミッション、/path/to/mt/php ディレクトリのパーミッションを確認します
画面が途中まで表示される
(静的)ダイナミックパブリッシングのページが途中まで表示された状態になる。
- 原因
- PHP を実行するためのメモリが足りない
- 対策
- php.ini で memory_limit の指定値を上げます
- mtview.php (.mtview.php) に下記の記述を加え、指定値を上げます
ini_set( 'memory_limit', '64M' );
PHP の実行に必要なメモリは環境や運用方法によって異なりますのでサーバ管理者と相談するなど適宜設定ください。
サムネイルが生成されない
ダイナミックパブリッシングのテンプレートでサムネイル画像が生成されない。
- 原因
- PHP モジュールの GD が利用できない
- 対策
- GD が利用できるか確認します
- GD がインストールされているか確認します
- GD で利用可能な画像の種類に制限がないか確認します (画像の拡張子によっては正常に動作する場合)
文字化けする
ダイナミックパブリッシングで出力したページが文字化けする。
- 原因
- PHP の mbstring モジュールが利用できない
- 対策
- mbstring が利用できるか確認します
- mbstring がインストールされているか確認します
画面がホワイトアウトする (何も表示されない)
この状態から原因の特定は困難だが、多くはエラーメッセージがでるケースの原因が当てはまるので PHP モジュールや設定を確認する。
他ケースの原因に当てはまらない場合は下記を確認する
- 原因1
- mt-config.cgi のDBHost に下記の指定を行っている
DBHost 127.0.0.1
- 対策1
- mt-config.cgi のDBHost を下記のように変更します
DBHost localhost
- 原因2
- PHP でデータベースにアクセスできない
- 対策2
- PHP でデータベースにアクセスできるかサーバ管理者などに確認する
Movable Type標準のダイナミックパブリッシングの動作確認
PowerCMSのダイナミックパブリッシングは、Movable Type のダイナミックパブリッシングが動作する事が前提条件になります。そのMovable Type標準のダイナミックパブリッシングは下記の手順で動作確認が行えます。
- MT 標準のテーマが適用されたウェブサイト/ブログを用意する
- 「公開」オプションで「ダイナミック」を選択したインデックステンプレートを作成します
- ウェブサイト/ブログのトップに .htaccess と mtview.php が生成されたか確認します
- 生成されない場合
- ディレクトリのパーミッションを確認します
- 作成したテンプレートに MTタグを一切記述せずに「テスト」とだけ記述します
- 作成したインデックステンプレートの出力先にアクセスします
- 「テスト」と表示されるか確認します
- 表示されない場合
- date.timezone や open_basedir など他ケースの原因について確認します
- テンプレートの内容を「<$MTBlogName$>」に変更します
- 作成したインデックステンプレートの出力先にアクセスします
- ブログ名が出力されるか確認します
- 表示されない場合
- date.timezone や open_basedir など他ケースの原因について確認します
「キャッシュする」と「ビルド結果をキャッシュする」の違いについて
同じ全般設定画面にある設定ですが、「キャッシュする」はMT標準の、「ビルド結果をキャッシュする」はPowerCMS標準のもので、その機能は異なります。
キャッシュする
「キャッシュする」はパラメータの内容には対応していないため下記は同一の扱いになり、どちらへアクセスしても同じ結果が出力されます。
- /hoge.html?foo=1
- /hoge.html?bar=2
PowerCMS ver.3 をご利用の場合、ツールメニューの「ダイナミックキャッシュをクリアする」よりキャッシュファイルの削除が行えます。
ビルド結果をキャッシュする
「ビルド結果をキャッシュする」はパラメータの内容に対応しているため下記は同一の扱いにはならず、別々にキャッシュされます。(テンプレートで、パラメータの内容によって出力結果を変化させている場合です)
- /hoge.html?foo=1
- /hoge.html?bar=2
コメントを投稿する