2008年6月6日
Movable Type 4.2をお使いの方は、4.2専用版をご利用ください。
「Perl版ダイナミック・パブリッシング」は、テンプレートの再構築を動的に行うことができるプラグインです。
読者がページにアクセスした時点でページを再構築する動作をします。
Movable Type本体のダイナミック・パブリッシングとは異なり、既存のプラグインをほとんど利用できるメリットがあります。
さらに、データベースとしてMySQLかPostgreSQLを使っている場合、ページをキャッシュして、動的再構築による負荷の増加を抑えることもできます。
このプラグインのMovable Type 4版を公開します。
なお、Movable Type 3.3では3.3用をお使いください。
1.プラグインのダウンロードと解凍
Perl版ダイナミック・パブリッシングのプラグインは、以下のアドレスからダウンロードします。
また、今回のバージョンから、再構築処理を別プラグインに分離しています。
そのプラグインは以下のアドレスからダウンロードします。
プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。
また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。
Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。
これら2つのファイルをダウンロードしたら、解凍しておいてください。
ただし、この時点ではまだアップロードは行いません。
2.全SQL対応版からバージョンアップする場合の準備
これまでに、全SQL対応版のPerl版ダイナミック・パブリッシングを利用していた場合、バージョンアップの前に準備の作業が必要です。
まず、MySQLまたはPostgreSQLでデータベースを管理している場合は、既存のキャッシュ用テーブルをデータベースから削除します。
手順は以下の通りです。
- 1.の手順で解凍したものの中に、「PerlDynamic」というフォルダがあり、その中に「mt-dpcache-drop.php」というファイルがありますので、そのファイルをメモ帳等で開き、内容をすべてコピーします。
- Movable Typeにログインして、Perl版ダイナミック・パブリッシングを利用しているBlogで、インデックス・テンプレートを新規作成します。
- インデックス・テンプレートの名前と出力ファイル名を「mt-dpcache-drop.php」にし、「テンプレートの内容」の欄に、先程コピーしておいたmt-dpcache-drop.phpの内容を貼り付けます。
- ここまででできたインデックス・テンプレートを保存し、再構築します。
- 再構築されたページにアクセスすると、既存のキャッシュ用テーブルが削除されます。
- mt-dpcache-drop.phpのテンプレートを削除し、またBlogの出力先ディレクトリからもmt-dpcache-drop.phpを削除しておきます。
また、データベースの種類に関係なく、以下の作業を行います。
- 各ブログから「dynamic_init.pl」と「mt-dpcache-load.php」のテンプレートを削除します。
- 各ブログの出力先ディレクトリから、「mt-dynamic.cgi」「dynamic_init.pl」「mt-dpcache-load.php」のファイルを削除します。
- Movable Typeの「plugins」ディレクトリから、「GetConfig.pl」ファイルを削除します。
3.プラグインのインストール
次に、Perl版ダイナミック・パブリッシングのプラグインをインストールします。
先程解凍したファイルの中に、「PerlDynamic」と「RebuildHelper」の2つのフォルダがあります。
それらのフォルダを丸ごと、Movable Typeのインストールにある「plugins」ディレクトリにアップロードします。
ただし、「mt-dpcache-drop.php」ファイルはアップロードしないでください。
これで、Movable Typeの「plugins」ディレクトリの中に、「PerlDynamic」と「RebuildHelper」というディレクトリができます。
「PerlDynamic」ディレクトリの中にある「mt-perl-dynamic.cgi」と「mt-perl-dynamic-setup.cgi」のパーミッションを「755」などに変えて、実行可能にします。
なお、Movable Typeの設定をutf-8以外にしていても、ファイルをアップロードする際には文字コードを変えないでください。
4.データベースの初期化
このプラグインをアップロードした後、初めてMovable Typeにログインする際には、以下のようなページが表示されますので、「アップグレードの開始」ボタンをクリックします。
サインインするようにメッセージが出たら、ログインを行います。
これで、データベースにテーブルが追加されます。
アップグレードが終わると、以下の表示になります。
5.FastCGI化の設定
FastCGIに対応したサーバーをお使いの場合は、Perl版ダイナミック・パブリッシングをFastCGI化することができます。
まず、サーバーにアップロードした「mt-perl-dynamic.cgi」の拡張子を、FastCGIの拡張子に変えます。
例えば、「.fcgi」の拡張子のファイルをFastCGIとして動作させるように設定している場合、「mt-perl-dynamic.cgi」を「「mt-perl-dynamic.fcgi」にリネームします。
次に、プラグインの設定で、「mt-perl-dynamic.cgi」の拡張子を指定します。
システムメニューのプラグイン一覧のページを開き、「Dynamic publishing by Perl」のプラグインの箇所で「設定を表示」のリンクをクリックします。
これで設定を行う状態になりますので、「mt-perl-dynamic.cgiの拡張子」の欄で、FastCGIの拡張子を設定します。
例えば、「.fcgi」の拡張子のファイルをFastCGIとして動作させるように設定している場合、この欄に「fcgi」と入力します。拡張子の前の「.」は入力しません。
6.ダイナミック・パブリッシングをオンにする
次に、Movable Typeのダイナミック・パブリッシングの機能をオンにします。
ダイナミック・パブリッシングにしたいBlogで、「設定」メニューの「ブログの設定」を選んで設定ページを開き、ページ左端のメニューで「公開」を選びます。
そして、「公開に関するオプション」の部分で「テンプレートごとに構築オプションを設定する」をオンにして、「変更を保存」ボタンをクリックします。
7.Perl版ダイナミック・パブリッシングの初期化
次に、Perl版ダイナミック・パブリッシングを初期化します。
ダイナミック・パブリッシングにしたいBlogで、「設定」メニューの「ブログの設定」を選んで設定ページに接続し、ページ左端のメニューで「プラグイン」を選びます。
そして、プラグイン一覧の「Dynamic Publishing by Perl」のところで「設定を表示」をクリックします。
すると、「初期化する」というリンクが表示されますので、それをクリックします。
初期化が終わると、以下のようなメッセージが表示されます。
なお、初期化では以下のような処理が自動的に行われます。
- .htaccessファイルの書き換え
- mt-dynamic.phpテンプレートの作成と再構築
- SQL用テンプレート(sqlsub_mysql.phpまたはsqlsub_pgsql.php)の作成と再構築
8. .htaccessファイルの確認
環境によっては、Movable Typeのダイナミック・パブリッシングの機能をオンにした際に、.htaccessファイルが正しく出力されないことがあるようです。
その場合、上記の手順での.htaccessの書き換えが正しく行われません。
初期化の際に「.htaccessファイルの書き換えに失敗しました。」のメッセージが表示された場合は、Blogの出力先ディレクトリに、以下の内容の.htaccessファイルを作成します。
また、Blogのサイトパスとアーカイブパスを別にしている場合は、アーカイブの出力先ディレクトリにも同じ内容の.htaccessを作成します。
ただし、リスト中の赤字の部分(4か所)は、Blogのトップページがサイトのルートにある場合のものです。
ルート以外のディレクトリにブログがある場合、赤字の部分を書き換える必要があります。
例えば、Blogのトップページのアドレスが「http://www.foo.com/blog/」の場合、赤字の部分を「/blog/mt-dynamic.php」にします。
## %%%%%%% Movable Type generated this part; don't remove this line! %%%%%%%
# Disable fancy indexes, so mtview.php gets a chance...
Options -Indexes +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
# The mod_rewrite solution is the preferred way to invoke
# dynamic pages, because of its flexibility.
# Add mtview.php to the list of DirectoryIndex options, listing it last,
# so it is invoked only if the common choices aren't present...
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.htm default.htm default.html default.asp /mt-dynamic.php
</IfModule>
RewriteEngine on
# don't serve mtview.php if the request is for a real directory
# (allows the DirectoryIndex lookup to function)
RewriteCond %{REQUEST_FILENAME} !-d
# don't serve mtview.php if the request is for a real file
# (allows the actual file to be served)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.(cgi|css|gif|jp*g|png)$
# anything else is handed to mtview.php for resolution
RewriteRule ^(.*)$ /mt-dynamic.php [L,QSA]
</IfModule>
<IfModule !mod_rewrite.c>
# if mod_rewrite is unavailable, we forward any missing page
# or unresolved directory index requests to mtview
# if mtview.php can resolve the request, it returns a 200
# result code which prevents any 4xx error code from going
# to the server's access logs. However, an error will be
# reported in the error log file. If this is your only choice,
# and you want to suppress these messages, adding a "LogLevel crit"
# directive within your VirtualHost or root configuration for
# Apache will turn them off.
ErrorDocument 404 /mt-dynamic.php
ErrorDocument 403 /mt-dynamic.php
</IfModule>
## ******* Movable Type generated this part; don't remove this line! *******
9.Perl版ダイナミック・パブリッシングの設定
次に、Perl版ダイナミック・パブリッシングを設定します。
初期化完了のページで、「このリンクをクリックして、設定を続けてください。」をクリックすると、設定ページに移動します。
また、ブログの「設定」ページの「プラグイン」でPerl版ダイナミック・パブリッシングの「設定を表示」をクリックし、その中の「設定を行う」のリンクをクリックしても、設定ページを開くことができます。
設定ページでは、以下の点を設定します。そして、設定が終わったら、「設定を保存」のボタンをクリックします。
・インデックスページのファイル名
メインページとアーカイブページのファイル名を指定します。
初期値は「index.html」ですが、BlogをPHP化している方は「index.php」に変えてください。
・ページが見つからないときの移動先のURL
間違ったアドレスのページに接続されたときには、エラーページに転送することができます。
その機能を使いたい場合は、この欄にエラーページのURLを入力します。
なお、この欄を空欄にした場合、間違ったアドレスに接続されたときには、「ご指定のアドレスのページは見つかりませんでした。」というメッセージが表示されます。
・キャッシュの設定
Movable TypeのデータをMySQLかPostgreSQLに保存している場合、ページのキャッシュ機能を使うことができます。
キャッシュ機能を使いたい場合は、「キャッシュを使う」のチェックをオンにします。
また、キャッシュをオンにする場合、「キャッシュの容量」の欄で容量も指定することができます。
10.ダイナミック・パブリッシングにするテンプレートを選ぶ
次に、インデックス・テンプレートとアーカイブ・テンプレートの中で、ダイナミック・パブリッシングにしたいものを選びます。
対象のテンプレートを開き、「再構築オプション」の部分にある「このテンプレートをダイナミックページにする」のチェックをオンにして、テンプレートを保存します。
↓このテンプレートをダイナミックページにする」のチェックをオンにする
11.Blog全体を再構築する
ダイナミック・パブリッシングにするテンプレートを選び終わったら、Blog全体を再構築します。
これ以後は、各ページがダイナミック・パブリッシングで出力されます。
なお、再構築後にBlogの出力先ディレクトリを見ると、「~.static」という名前のファイルができています。これらのファイルは、これまでの静的再構築で作られていたファイルです。
これらのファイルは不要になりますので、サーバーから削除することができます。
12.指定日投稿と組み合わせる場合
指定日投稿を使う場合、Movable Typeのlib/MT/WeblogPublisher.pmを一部書き換えることが必要です。
このファイルの中に「sub publish_future_posts」という部分があります。
その部分の最後のあたりに、以下の赤字の部分を追加します。
・
・
・
}
else {
$blog->touch;
$blog->save;
}
}
}
$total_changed > 0 ? 1 : 0;
}
sub remove_entry_archive_file {
・
・
・









コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
キャッシュを使う設定にすると、
「キャッシュファイルのコピーに失敗しました」と表示され、
キャッシュを外すと、今度は
"Warning: include() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/local/lib/php') in .../mt-dynamic.php on line 181"と表示されます。
なんだか、いつも同じ質問をしているようで恐縮なのですが、
今回もおつき合い下さい。
よろしくお願いします。
>footbrainさん
こんにちは。
mt-perl-dynamic.cgiが正しく動作していないものと思われます。
mt-perl-dynamic.cgiのパーミッションを確認してみてください。
たびたびスミマセン。自己レスです。
http://www.h-fj.com/blog/archives/2007/03/07-124806.php#comment-1858
の「試しに、mt-perl-dynamic-setup.cgiと、mt-perl-dynamic.cgiの先頭の行を、
以下のように変えて、警告メッセージを出力しないようにしてみてください。
変更前:
#!/usr/bin/perl -w
変更後:
#!/usr/bin/perl」を参考にして見たところ、
Perl版ダイナミック・パブリッシングからのエラー表示はなくなりました。
キャッシュのon/offに関わらず、問題なく機能しています。
ご迷惑をおかけしました。ゴメンナサイ。
お世話になります。
MT4へアップグレードしたため、ダイナミックパブリッシングもアップグレードすることにしました。
しかし、手順どおり作業を進めても、ダイナミックパブリッシングが有効になっていないようで、index.htmlにアクセスしてもInternalServerErrorになってしまいます。
気になることがあるのですが、私の場合、データベースのキャッシュテーブルを削除して、何度、「PerlDynamic」と「RebuildHelper」の2つのフォルダをアップロードし直しても、MTへの再ログイン後、「アップグレード開始」の画面が出ないのです。設定→プラグインを見てみると、きちんと「Dynamic publishing by Perl 3.20」となっていて、初期化や設定ができるので、一見、インストールが完了しているようには見えるのですが。
でも、、「アップグレード開始」をしていないということは、アップグレードができていないということなのですよね?
これまでPerlDynamic_3_10を使っていて正常に動いていましたがどうしてでしょうか。。。
アドバイスをいただけましたら嬉しく思います。
よろしくお願いいたします。
>へまさん
こんにちは。プラグインご利用ありがとうございます。
もし、さくらインターネットをご利用であれば、以下の点を確認してみてください。
1.Blogのディレクトリに.htaccessファイルが出力されていますので、そのファイルから「Options」の行を削除します。
2.Blogのディレクトリに「mt-perl-dynamic.php」ファイルが出力されていますので、そのパーミッションを705に変えます。
なお、バージョン3.10からバージョンアップした場合、データベースは既存のものを使いますので、「アップグレード開始」の画面は表示されません。
壱さま
ご回答いただき、ありがとうございました。
おかげさまで、成功しました。
バージョン3.10からのバージョンアップにかかわらず、「3.全SQL対応版からバージョンアップする場合の準備」にてキャッシュテーブルを削除してしまったのが1番の原因でした。
http://www.h-fj.com/blog/archives/2007/03/07-124806.php
上記のエントリーに、その場合の対処法がありましたので参考にさせていただき、無事、キャッシュテーブルを復旧させることができました。その後、今回教えていただいた1と2をやってみて、成功しました。
ありがとうございました!!
僕も同じ用に、
Warning: include() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/local/lib/php') in .../mt-dynamic.php on line 181
といったメッセージで使用できませんでした。
ログを読んで、全部試しましたが、変化ないので…。
非常に残念ですが、導入を断念します…。
はじめまして。Perl版ダイナミック・パブリッシング(MT4版)の導入を試みているものです。
この記事の手順に従って導入し、テンプレート「ブログ記事リスト」のダイナミック化を指定しました。これによってそれまで存在したindex.htmlはindex.html.staticにリネームされました。
しかし、ブログからアクセスすると500エラーが出ます。上記コメント5の1,2の対応も試しましたが状況は好転しませんでした(Option行を削ると403エラーに変わり、スタティックなindex.htmlも同エラーとなる)。
お手数とは思いますが、もしなにか思い当たる点などありましたらご指摘いただければ幸いです。ホスティングサービスはCPIです。
>細野さん
こんにちは。
CPIのヘルプを少し読んでみましたが、CPIのPHPは独自のカスタマイズがなされているようで、何か特殊な設定をしないとこのプラグインを動作させられないのかも知れません。
申し訳ありませんが、いただいた状況だけでは、それ以上のことは分かりません。
藤本さま
返答ありがとうございます。
お手数をおかけいたしました。解決いたしました。
お恥ずかしい限りですが、CPIの管理画面でapacheのログが見られることを失念していまして、それを確認しましたところ、blogのフォルダ自体の属性が適切でないとのエラーがでていました。これを設定しなおしましたところ、稼動いたしました。
これがCPI独自のカスタマイズのためなのかどうかは不明ですが、ともあれ助かりました。
ありがとうございました!
導入していて、くだらない部分でつまづいていましたのでご報告です。
症状はメインindexは問題なく表示されるのですが、アーカイブだけがInternalServerErrorと表示されました。
ブログの設定 → 公開 → アーカイブをサイトパスとは別のパスで公開する
にチェックが入れてある場合、その別のパスにも.htaccessファイルが出力されています。
これを、ブログ公開先にある.htaccessファイルと同じ内容にコピーすることで本来の動作が行えました。
ダイナミックパブリッシングでアーカイブの公開先を変更しても意味は無いのですが、元々ダイナミックパブリッシングではなく、今回の導入前に、この部分にチェックが入っていてつまづく原因になりました。
同じところでつまづいている人が居ましたら参考にしてください。
素敵なプラグインをありがとうございます。
さくらインターネットでは標準のダイナミックパブリッシングが使えないようなので助かりました。
>虎!さん
こんにちは。
有益な情報をいただきありがとうございました。
こんにちわ。Perl版ダイナミック・パブリッシング(MT4版)の導入を試みているのですが、全ての手順を行って再構築を行っても、file not foundになってしまいます。(現在は静的にしています)
私なりに原因を探ってみたのですが、手順7で初期化を行った際、「.htaccess」が作られますが、その内容がなぜか空っぽになっています。これが原因ではないかと思うのですが・・・
サーバーはXREAです。
よろしければ、「.htaccess」で本来記述される内容を教えていただけないでしょうか。(手動でアップしますので)
以上、よろしくお願いします。
>わ~さん
こんにちは。
.htaccessの内容は以下のようになります。
## %%%%%%% Movable Type generated this part; don't remove this line! %%%%%%%
# Disable fancy indexes, so mtview.php gets a chance...
Options -Indexes +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
# The mod_rewrite solution is the preferred way to invoke
# dynamic pages, because of its flexibility.
# Add mtview.php to the list of DirectoryIndex options, listing it last,
# so it is invoked only if the common choices aren't present...
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.htm default.htm default.html default.asp /mt-dynamic.php
</IfModule>
RewriteEngine on
# don't serve mtview.php if the request is for a real directory
# (allows the DirectoryIndex lookup to function)
RewriteCond %{REQUEST_FILENAME} !-d
# don't serve mtview.php if the request is for a real file
# (allows the actual file to be served)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.(cgi|css|gif|jp*g|png)$
# anything else is handed to mtview.php for resolution
RewriteRule ^(.*)$ /mt-dynamic.php [L,QSA]
</IfModule>
<IfModule !mod_rewrite.c>
# if mod_rewrite is unavailable, we forward any missing page
# or unresolved directory index requests to mtview
# if mtview.php can resolve the request, it returns a 200
# result code which prevents any 4xx error code from going
# to the server's access logs. However, an error will be
# reported in the error log file. If this is your only choice,
# and you want to suppress these messages, adding a "LogLevel crit"
# directive within your VirtualHost or root configuration for
# Apache will turn them off.
ErrorDocument 404 /mt-dynamic.php
ErrorDocument 403 /mt-dynamic.php
</IfModule>
## ******* Movable Type generated this part; don't remove this line! *******
ただし、赤字の「/mt-dynamic.php」の箇所は、ブログのURLに応じて変える必要があります。
例えば、ブログのURLが「http://www.foo.com/blog/」だとすると、mt-dynamic.phpのURLは「http://www.foo.com/blog/mt-dynamic.php」になるはずです。
この場合、赤字の「/mt-dynamic.php」を「/blog/mt-dynamic.php」に書き換えます。
藤本さま
早速のご回答ありがとうございます。
おかげさまで解決いたしました。
はじめまして。
こちらのPerl版ダイナミック・パブリッシングを利用させていただいております。
ブログ記事のテンプレートをダイナミック・パブリッシングで出力させると以下の現象が起きます。
1.ブラウザ(IE6)のステータスバーに「'commenter_name'は宣言されていません。」というエラーメッセージが表示される
2.デフォルトでは非表示になるはずのコメントフォームが常に表示されてしまう
3.「MTIf=entry_template」で出力させている「カテゴリ」が出力されない
ブラウザをFireFoxに切り替えても2.、3.の現象が起きます。
ダイナミック・パブリッシングを解除するとこれらの問題は起きないのですが…
なお、現在の状態はMT4.01のデフォルト状態で、テンプレート等には手を加えていません。
考えられる原因など、ご教授いただければ幸いです。
>shimaさん
こんにちは。
ご指摘の不具合を修正したものを公開しました。
http://www.h-fj.com/blog/archives/2007/11/27-104639.php
壱さま
素早い対応、ありがとうございます。
差し替えたところ問題なく表示されるようになりました。
はじめまして。
仕事の関係でMT4を使用しています。
そのサイトでは、エントリーページでも常にすべてのエントリーも表示したいため、エントリーアーカイブのみダイナミックパブリッシングにしようと思い、こちらのプラグインを使用させていただくことにしました。
プラグインをインストールし、各設定も問題なく済み、さぁ!とエントリーページを見ようとしましたが、、、何も表示されませんでした。。
各々のエントリーへのリンクはあるものの、エラーメッセージも出なく、ただの白い画面があるだけです。(ソースも真っ白です。)
なにが原因なのか、もしよろしければ教えていただけませんでしょうか。MT初心者で、ここ毎日MT残業です。。
よろしくお願いします。
こんにちは。
申し訳ありませんが、そちらのサーバーにログインして動作を追ってみないと、問題の原因をつかめなさそうです。
私も同じ様な状況になりました。
条件が違うかもしれませんが、参考までに行った事メモしておきます。
システム:MTOS
私のサイトはW3C勧告準拠で構築しているので、
先頭にXML宣言を入れているのですが、
これを直書きしていると、何も出力されなくなります。
(テンプレートのヘッダー内に記述しています。)
試しにxml宣言を削除すると表示されます。
インデックスの拡張子は.htmlで、ダイナミックパブリッシングのプラグインでもindex.htmlなのですが、どうも先頭の"
がないかモジュールテンプレートをチェックしてみる事をお勧めします。
>はじめまして。
>仕事の関係でMT4を使用しています。
>そのサイトでは、エントリーページでも常にすべてのエントリーも表示したいため、エントリーアーカイブのみダイナミックパブリッシングにしようと思い、こちらのプラグインを使用させていただくことにしました。
>プラグインをインストールし、各設定も問題なく済み、さぁ!とエントリーページを見ようとしましたが、、、何も表示されませんでした。。
>各々のエントリーへのリンクはあるものの、エラーメッセージも出なく、ただの白い画面があるだけです。(ソースも真っ白です。)
>なにが原因なのか、もしよろしければ教えていただけませんでしょうか。MT初心者で、ここ毎日MT残業です。。
>よろしくお願いします。
いつもお世話様です。
Perl版ダイナミック・パブリッシングを何とか導入させていただきました。この状態でモブログすべくMTmailを使用してエントリを投稿したところ、管理画面のブログ記事の一覧には正常に現れるのですが、全然サイトに反映されませんでした。管理画面で手動でサイトの再構築をしても改善せず、試行錯誤した結果、プラグインの設定のところからキャッシュをクリアしたところ表示されるようになりました。この現象を回避する方法はないもんでしょうか。
>yuhaさん
こんにちは。
ご質問の件ですが、おそらくMT/lib/XMLRPCServer.pmを書き換えれば動作するようになると思います。
MT4.01だと、上記ファイルの250行目に「$entry->save;」という文があります。この後に、以下の2行を追加してみてください。
$blog->touch;
$blog->save;
壱様
すばやいご回答ありがとうございました。
今さっき帰宅しまして、早速ご教示の内容でMT/lib/MT/XMLRPCServer.pmにパッチをあててみたところ、モブログで投稿してもサイトに反映されるようになりました。
どうもありがとうございました。
キャッシュの保存に失敗しました sql = insert into mt_dpcache (dpcache_blog_id, dpcache_uri, dpcache_modified_on, dpcache_pagefile, dpcache_pagesize) values ( 2, '/index.html', '2008-01-11 20:45:53', '0630988794.php', 45148)
といったエラーが続出するようになってしまったのですが、どうにか、ならないものでしょうか?
何回かリロードすると直ることもあるのですが、どうもアクセスが集中する時間帯でエラーが頻発するような気がします。(たまにアクセスがないときにも出ることがあり。)
ぜひなにか対策などございましたらぜひ教えていただきたく思います。よろしくお願いします
>匿名さん
プラグインご利用ありがとうございます。
ご質問の件ですが、キャッシュを保存しようとして失敗している状況です。
何らかの原因で、MySQLの負荷が高くなっているものと思われます。
個人向けのレンタルサーバーだと、多数の人でMySQLを共有する形になりますので、負荷が上がりやすいです。
特に、ロリポップなどの一部のレンタルサーバーでは、MySQLのサーバーの台数が少なく、負荷が非常に高くなることもあります。
この場合だと、レンタルサーバーを乗り換えるしかないと思います。
また、推測ですが、スパムボットから多数のアクセスを受けていて、それによって負荷が上がっているのかもしれません。
その場合、.htaccessを使って、スパムボットからのアクセスをはじくような対策をすることが考えられます。
壱さんご返答ありがとうございます。
>キャッシュの保存に失敗しました sql = insert into mt_dpcache (dpcache_blog_id, dpcache_uri, dpcache_modified_on, dpcache_pagefile, dpcache_pagesize) values ( 2, '/index.html', '2008-01-11 20:45:53', '0630988794.php', 45148)
のものです。 使っているサーバーはヘテムルというサーバなのですが、さきほど問い合わせた際、壱さんの言うとおり、やはりアクセスの過多によるものと返答がきました。
1日30000PV程なのですが、壱さんのダイナミック・パブリに耐えられるようなサーバを教えていただけないでしょうか?
さくらのプレミアムは、MySQLが重いそうで、Webアリーナは少し割高だなぁ・・・と四苦八苦しております。
ぜひ何処かいいサーバがありましたらぜひご教授くださるとさいわいでございます。
>匿名さん
こんにちは。
1日30000PVともなると、共有のレンタルサーバーでは厳しいのではないかと思います。
再構築を楽にしたいということであれば、「Junnama Online」というブログで配布されている「Rebuild at 1st View」というプラグインもあります。
このプラグインは、動的に再構築したものを、キャッシュではなく実ファイルに保存する形式です。
キャッシュのチェックのためにDBにアクセスすることがないので、より高い負荷に耐えうると思います。
http://junnama.alfasado.net/online/2008/01/post_126.html
さっそくのご返事ありがとうございます。 このプラグインをつかってみようと思うのですが、実はMT3.34からMT4に移行した際に静的に再構築すると最新の1~2記事しか生成できないのです。 さきほどこのプラグインをインストールしてやってみましたが、結果は同じでした。 MT4のインストールは普通に新品からやってみたのですが・・・。 なにかありましたらぜひご教授いただけるとさいわいです。
>匿名さん
こんにちは。
Junnamaさんのプラグインに関しては、申し訳ありませんがJunnamaさんにお問い合わせください。
はじめまして。
このプラグインをMT4.1で使おうと思い、何回も設置をやってみたのですが、サーバの広告しか表示されません。
広告を一度取り外してみましたが同じくダメでした。
一度echoを入れてどこまで実行しているか確認したのですが、どうもinclude($filename);の部分でただしく読み込まれていないようです。
キャッシュはOFFで.htaccessファイル/mt-dynamic.php/sqlsub-mysql.phpは正しく生成されています。
>sky@nanosharpさん
こんにちは。
試しに、以下のようなアドレスにアクセスして、どのようなメッセージが表示されるかを調べていただけますでしょうか。
「○○○」には、表示したいページのアドレスから、「http://ドメイン名」を除いたものを指定します。
http://MTのディレクトリ/plugins/PerlDynamic/mt-perl-dynamic.cgi?uri=○○○
例えば、MTを「http://www.foo.com/mt/~」のディレクトリにインストールしているとします。
また、表示したいページのアドレスが「http://www.foo.com/blog/index.html」だとします。
この場合、以下のアドレスにアクセスします。
http://www.foo.com/plugins/PerlDynamic/mt-perl-dynamic.cgi?uri=/blog/index.html
Perl版ダイナミックパブリッシングは有効にしていないのですが、次のように表示されました。
/home/nsblog/public_html/blogs/nsblog3/phptemp/0014760794.php
>sky@nanosharpさん
こんにちは。
mt-perl-dynamic.cgiの中で、ページのアドレスからページの情報を得る処理を行っていますが、その処理がなぜかうまくいっていないようです。
外からはそこまでのことは分かりますが、なぜそうなってしまっているかは、申し訳ありませんが、そちらのサーバーでデバッグしてみないと分からないです。
そうですか、わかりました。
ありがとうございました。
こんばんは。
何度かこちらにコメントを送信させていただいているのですが、スパムに分類されてしまうような部分があったようなので、再編集して再度コメントさせていただきます…。
プラン変更、MT4.1へUPグレードに伴い、こちらのプラグインを利用させていただきました。
当方、1つのMTで2つのブログを稼動させているのですが、こちらのプラグインではどちらかひとつのブログだけしかダイナミックパブリッシング化できないのでしょうか。
分かる範囲で結構ですのでご教授ください。
ブログID1(リンク先のURLのブログです)…メイン・アーカイブページのみ静的ファイル。その他全てを動的ファイル化したところ、動的ファイル部分で500エラーを発症。
ブログID2…メインページのみ静的ファイル。その他全てを動的ファイル化。こちらはエラー表示などは出ず、問題なく正常稼動中。
利用しているホスティングはさくらのスタンダードプランで、こちらのコメント欄にありました.htaccessのOptionsの行を削除する対策については両ブログとも実施済みです。
プラグインご利用ありがとうございます。
ご質問の件ですが、これまでにも数名の方から同様の現象で問い合わせをいただいています。
ただ、こちらがテストしている限りでは、1つのMTで複数ブログでPerl版ダイナミック・パブリッシングを動作させることができています。
何かサーバーに依存する問題があるのだと思いますが、申し訳ありませんが、現状では解決策が見つからない状況です。
ご返答ありがとうございます。
かなり便利なのでどうしても使いたかったんですが、サーバー依存の問題となると、ここでは解決できませんね…。
ちょっとホスティング先に問い合わせてみます。
いつもお世話になっております。
Perl版ダイナミック・パブリッシングを導入させていただいております。立ち上げが出来てからは特に問題なく運用させていただいていたのですが、先日横一列カレンダーを入れてみようと思い立って日別アーカイブを作成するように変更しました。この状況でもPerl版ダイナミック・パブリッシングは順調に稼動しておりましたが、なぜか2008年1月26日のアーカイブだけ作成に失敗してしまう現象が発生しています。
横一列カレンダーの問題かと思ったのですが、テストとして静的構築で横一列カレンダーをつけたブログを作ってみたところ(/test2000/)、そちらではそのような問題は発生しませんでした。
2008年1月26日だけ記事を書かなければ何も問題はないのですが、何か類似の事例をご存知でしたら、対策等ご教示いただけませんでしょうか・・・
>yuhaさん
こんにちは。プラグインご利用ありがとうございます。
ご質問の件ですが、記事の中でタグを使えるようにするプラグインをお使いではないでしょうか。
1月26日の記事に何らかのタグを使っていて、そのタグの処理に失敗しているのではないかと推測しました。
ただ、ダイナミック・パブリッシングだと失敗する理由は、申し訳ありませんが分かりません。
壱様
お忙しいところご回答いただきましてありがとうございました。
私も最初は記事自体に何か問題があったのかと思ったのですが、公開日を他の日に変更しただけで問題なく表示できるようになってしまったため、頭を抱えております。
きっと何かと何かが干渉してこのような現象が起こっているのだと思います。いろいろ試してみまして、何か判明しましたらまたfeedbackさせていただきます。
お忙しいところお手数おかけしまして申し訳ございませんでした。
お世話様です。
本件ですが、最近発生した別の現象を調べているうちに、MySQLのテーブル「mt_fileinfo」に、登録されているデータのileinfo_archive_typeがDailyの属性の項目で、消した筈の記事nの物がfileinfo_file_pathのところに同じ名前で何個もあることがわかりました。
該当する記事は無い筈なのでこれらを削除したところ問題が解決してしまいました。
何故こんな風になったのかよくわかりませんが、対症療法がわかりましたので、ご報告いたします。
いつも有益なプラグインをありがとうございます。
さて、先日もこのエントリに他の方へのレスの形で
コメントさせていただきましたが、
MTOSで、このプラグインを利用させていただく際、
ファイル先頭にXML宣言を入れると、ソースが出力されない
まっ白な状態になります。
試行錯誤の結果、PHPのechoでXMLを出力させると、
表示される事は確認したのですが、
システムテンプレートでは、ソース内にPHPのecho文が残った状態で
出力されてしまいます。
この現象が、特定条件(私の環境)のみの物なのか、
判断がつきませんが、なにか対処法がありましたらアドバイス頂けませんでしょうか?
よろしくお願い致します。
>MTOSユーザーさん
こんにちは。
まず、XML宣言は「<:?」と「?>」で囲まれますが、PHPの一般的な設定では、「<:?」と「?>」で囲まれた部分はPHPのスクリプトと見なされます。
Perl版ダイナミック・パブリッシングでは、ページをPHPで処理しますので、XML宣言をそのまま入れると、正しく動作しなくなります。
XML宣言を入れたい場合は、以下のようにXML宣言をPHPのスクリプトで出力するようにします。
<?php print('XML宣言の内容' . "\n"); ?>
次に、システムテンプレートの件です。
システムテンプレートはCGIによって処理され、PHPの処理を通らないので、PHPの文はそのままの形で出力されます。
1つの解決方法は、システムテンプレートではPHPを使わないようにすることです。小粋空間様の以下の記事を参考にしてください。
・Movable Type 4 で PHP 化する時の注意事項
http://www.koikikukan.com/archives/2007/12/21-013313.php
もう1つは、CGIで出力されたものをファイルに保存し、それをPHPで処理する方法です。
これについては、当ブログの以下の記事を参照してください。
・コメント/検索関連テンプレートのPHP化
http://www.h-fj.com/blog/archives/2005/09/16-161205.php
壱様
すみません、返信の形で投稿出来なかったので新しいスレッドで。
お休みに素早いご返事頂き恐縮です。
お知らせ頂いた対処法、判りやすかったです。
ただ、最初の書き込みに書いていなかったのですが、
こちらの環境ではPHP化を行っておりません。
拡張子は.htmlで出力している状態なのですが
上記の様な対処法が必要でした。
この状態は意図された挙動でしょうか?
何度もお手を煩わせて申し訳ございません。
よろしくお願い致します。
>MTOSユーザーさん
こんにちは。
ページの拡張子がhtmlであっても、Perl版ダイナミック・パブリッシングではPHPで処理を行います。
壱様
>ページの拡張子がhtmlであっても、Perl版ダイナミック・パブリッシングではPHPで処理を行います。
了解しました。
小粋空間様の記事を参考に解決出来ました。
ありがとうございました。
はじめまして。
こちらのPerl版ダイナミック・パブリッシング(MT4版)の導入を試みているものです。
こちらの手順通りで、とりあえず初期化、再構築まで行いました。
特にエラー等は出なかったのですが、ブログを表示してみておかしな点に気付きました。
テンプレートを見てみると、テンプレート名や内容に含まれる日本語文字列部分が全て"????"に化けてしまっていました。
その関係で再構築時にエラーになってしまいました。
何か手順を間違えてしまったでしょうか?
全ての文字化けを手直しするのは困難なので、仕方なくいったんブログを削除し、新たにブログを作成し直しました。
すると、今度はPerlDynamicプラグインの設定で、初期化や設定へのリンクURLにMTCGIPathが反映されずリンクエラーになってしまいました。
(http://foo.bar.com/hoge/mt/plugins/~ のはずが http://foo.bar.com/plugins/~ になっている)
正しいURLを直打ちすれば一応設定できたのですが、このリンクを直すにはどうすれば良いでしょうか?
よろしくお願いします。
ブログを作成し直した後、少しいじっていたら、いつの間にか再度文字化けしてしまいました。
ちなみにテンプレートだけでなく、ブログ名等全般的に化けてしまうようです。
もしかして環境の問題でしょうか。
いずれにせよ、ちょっとこれでは使えないので使用をあきらめます。
もし原因が分かりましたら対応よろしくお願いします。
何度もすいません。
その後インストール時の
> ただし、「mt-dpcache-drop.php」ファイルはアップロードしないでください。
の一文を見逃していた事に気付きました。
それでこのファイルのせいかどうか分かりませんが、改めて一からやり直した所、今度は文字化けも起こらず、普通に動作しているようです。(少なくとも今のところ)
これでダイナミックパブリッシングでもテンプレートタグのプラグインが使えるようになって助かります。
ということで、何度もお騒がせしてすみませんでした。
MT4.1にインストールしようとしたところ、最初のログインで以下のエラーが出て、インストールが成功しませんでした。
データベースをアップグレードしています・・・
dpcacheのテーブルを更新しています...
アップグレード中にエラーが発生しました failed to execute statement ALTER TABLE mt_dpcache ADD dpcache_id integer NOT NULL PRIMARY KEY auto_increment: Multiple primary key defined at lib/MT/Upgrade.pm line 2003.
全SQL対応版Perl版ダイナミック・パブリッシングは使ったことがなかったので、その部分は飛ばしてやったのですが……。
>“教官”都々目さとしさん
プラグインご利用ありがとうございます。
ご質問の件ですが、すでにあるテーブルをアップデートしようとして、失敗しているようです。
MySQLをお使いで、かつphpMyAdminが使えるのであれば、以下の手順でテーブルを削除して、再度ログインを試してみてください。
1.「mt_dpcache」テーブルを削除します。
2.「mt_config」テーブルの内容を表示します。
3.1つだけレコードがありますので、そのレコードを編集する状態にします。
4.「config_data」フィールドの値から、以下の部分を削除します。
PluginSchemaVersion PerlDynamic/PerlDynamic.pl=3
わざわざありがとうございます。
config_dataフィールドにはPluginSchemaVersion~はありませんでしたが、mt_dpcacheを削除したところ、データベースの更新ができました。
ただ、実際にダイナミック・パブリッシングを使用しようとすると500でエラー。さくらインターネットを使っているので、.htaccessのOptions行をコメントアウトし、あとphpに実行属性をつけたのですが、それでも駄目。結局挫折しております……。
テンプレートがPerl版ダイナミック・パブリッシングで構築する設定になっているかどうかを判定したいのですが、MTIfDynamicのような条件タグはありませんか?
他の方法で判定できるとすれば、どのような方法がありますか?
まいどまいど妙な質問で恐縮ですが、よろしくお願いします。
>footbrainさん
こんにちは。
Perl版ダイナミック・パブリッシングで構築されているかどうかを判断するようなタグは、申し訳ありませんがありません。
手動で判断する方法として、以下のようなものが考えられます。
1.Perl版ダイナミック・パブリッシングを使うテンプレートの先頭に、以下のようなMTSetVarタグを入れます。
<MTSetVar name="perl_dynamic" value="1">
2.Perl版ダイナミック・パブリッシングを使っているかどうかを判断して出力を変えたい箇所に、以下のようなタグを入れます。
<MTIf name="perl_dynamic">
Perl版ダイナミックパブリッシングを使っているときに出力する内容
<MTElse>
Perl版ダイナミックパブリッシングを使っていないときに出力する内容
</MTIf>
>壱さん
なるほど、そうですね。それでいいですよね。
ありがとうございました。
キャッシュを使うに設定した際なのですが、キャッシュの保存に失敗しました sql = insert into mt_dpcache (dpcache_blog_id, dpcache_uri, dpcache_modified_on, dpcache_pagefile, dpcache_pagesize) values ・・・
などと表示されます。
同じような現象で経験された方はいらっしゃいますでしょうか?
すみません、自己レスです
No25を参照させて頂いておりましたが、
レンタルサーバーでもなく、負荷による障害では考えにくい状態に有るとき、当エラーが出ている状態となります。
MYSQL Version 5.0.27
PHP Version 5.2.5
Perl Version 5.8.5
の環境なのですが、これ以外では特に不具合などはありません。
環境の設定などによるものなのでしょうか・・・
ちょっと今のところ解決策が見つかっておらず、いったんOFFにして利用させていただいています。
>さむらいさん
こんにちは。プラグインご利用ありがとうございます。
キャッシュをオンにすると常にエラーが出るのであれば、キャッシュ用のテーブル(mt_dpcache)が正しく作られていないといった原因が考えられます。
ただ、実際の動作を追ってみないと、はっきりとした原因は何ともいえません。
>壱さま
お世話になります、ご返信ありがとうございます。
プライグインを活用させていただきましてありがとうございます。
mt_dpcacheの存在を確認致しましたところ、問題なくテーブル自体はございましたが、やはりレコードが存在しなく、書込みにいく際になにか障害がでているものと思われます。
なぜこのテーブルだけには失敗しているのかが分かれば自動的に解決しそうなので、もう少し出来る限り現象を詰めてみたいと思います。
キャッシュ機能なしでも実際は支障がないのですが、せっかくある機能なので活用できればなと思いまして ^^;
また何か分かりましたらご報告したいと思います!
こんにちは。
キャッシュをオンにすると常にエラーが出る件につきまして、
ちょっと気になったので、再度調査を行っております!
ブラウザに表示されるエラーの全文は、
========================
キャッシュの保存に失敗しました sql = insert into mt_dpcache (dpcache_blog_id, dpcache_uri, dpcache_modified_on, dpcache_pagefile, dpcache_pagesize) values (\n8,\n'/blog/test_blog/',\n'2008-05-20 03:06:21',\n'0804568017.php',\n17807)
========================
となっておりました。
手動で、mt_dpcache へINSERTできるかな?と思いまして、
直接MYSQLコンソール上で同じSQL(表示されていた\n のコードは省きました。)
MYSQL>insert into mt_dpcache (dpcache_blog_id, dpcache_uri, dpcache_modified_on, dpcache_pagefile, dpcache_pagesize) values (8,'/blog/test_blog/','2008-05-20 03:06:21','0804568017.php',17807);
を行ったところ、問題なくmt_dpcache へレコードが追加されました。
ということはテーブル自体は問題なさそうです。
MT自体は問題ないですので、mt_dpcache への書込み系の権限で引っかかっているケースもあるのでしょうか・・・
もし何か手がかり的なヒントなど思い当たる部分など頂けますと幸いです。
すみません、自己レスです
mysql のクエリーログを取得するように設定をし直し、
再度詳細を眺めてみました。
ここでちょっと気になったのがエラー表示にも含まれていた、
(全角逆スラッシュ)\nが、そのままクエリーログにも記載されていたことです。
ひょっとすると原因は、この語句、”\n”が発行しているSQLに含まれているために起こってる単純なことなのかと思い始めましたが・・
知識がないため、どこを修正・確認すればいいのかがちょっとまだ追いついていません。。
この全角逆スラッシュはどこから紛れ込んでいるのかでしょうか・・
すみません、再度自己レスです
MYSQL側でクエリーログを採取してみました。
原因に関係がありそうで、少し引っかかっているところとしましては、
insert into mt_dpcache で発行されているSQL文に、
"キャッシュの保存に失敗しました"エラーのところに表示されていた
\n(全角逆スラッシュ+n)がそのまま、ログファイルにも記載されておりました・・・
おそらくどこかの改行部分がそのままSQLに渡されているためにエラーになっているような感じが強いかもしれません。。。
この全角逆スラッシュが不思議で、どこからきているのか?を調査しておりますが、知識不足もあり・・ちょっとまだ究明しきれておりません。
↑上記書込みがダブってしまい申し訳ございません。。
再度自己レスです。
原因となっておりましたのは、やはりinsert into mt_dpcache に含まれていた(全角逆スラッシュ)\n でした。
なぜかまだ不明なのですが、
mt-dynamic.phpの
$sql .= "(dpcache_id, dpcache_blog_id, dpcache_uri, dpcache_modified_on, dpcache_pagefile, dpcache_pagesize) values ( ";
以降の(半角逆スラッシュ)\nが全て全角逆スラッシュに変わってしまっており、
mt-dynamic.tmpl内の(半角逆スラッシュ)\nを全て削除した上で、
初期化→キャッシュの設定→保存
で動作致しました。
なぜテンプレートの半角逆スラッシュが、mt-dynamic.phpで全角逆スラッシュになってしまっていたのかはまだ判明しておりません。
初歩的な環境に依存するところなのかもしれません。。
また何か判明できましたらご報告させて頂きます。
ありがとうございました。
>さむらいさん
こんにちは。
調査していただき、ありがとうございました。
半角がなぜ全角に変換されたのかが不明ですが、動作したということで良かったです。
>壱 さま
ありがとうございました。
別サーバーで同じ手順で環境を作成したところ、やはりこちらもなぜか勝手に全角になってしまい、同じ原因かと思われますので現在調査中です ^^;
今は、mt_dpcacheにもレコードが無事追加されキャッシュ情報が貯まるようになりました!
ただ新しい記事が投稿されても、古いキャッシュを見にいってしまい、
キャッシュをクリアしないと反映されない現象にただいま入ってしまいました ^^;
設定の見直しもいれて眺めていたのですが、、もしお力添えいただけますと幸いです。
またMT4.1標準の”公開設定内”の
ダイナミックパブリッシングでキャッシュを有功にする
にチェックを入れて使う方法と、
Perl版ダイナミック・パブリッシングの”キャッシュON”
とで、どう使い分けをすればいいかなどもしありましたら教えていただけますと幸いです。(今現在は、MT4.1標準のキャッシュを有功をON、Perl版はOFFにしていろいろお試しをしております・・・)
こんばんわ
キャッシュをクリアしないと記事が表示(更新)されない
件につきまして、あれこれ実験していたのですが
バックグラウンドで記事を投稿する独自につくっていたperlで今回試していたのですが、
No.21を参考にさせて頂き、そのperlの中で、
$entry->save したあとに
$blog->touch;
$blog->save;
することで、いままで止まっていた更新表示も新規記事も無事(当プラグインの)キャッシュONでも表示できるようになりました。
ありがとうございました。
peal版ダイナミックパブリッシングありがたく利用させて頂いております。
現在利用しているサーバーから、別のサーバーに移転することになりまして、構築作業を進めているのですが、上手くいきません。
ルート上のデータやデータベースの移行などは上手くいっていると思うのですが、前途の方と同じように「.../mt-dynamic.php on line 181」が表示されます。
キャッシュを有効にすると「キャッシュファイルのコピーに失敗しました」とメッセージが表示されます。
「/mt-dynamic.php on line 181」エラーメッセージの時は旧サーバーのルートパスと「phptemp」と表示されるので、いろいろ探してたのですが記載設定されているファイルやデータが見つかりません。
http://MTのディレクトリ/plugins/PerlDynamic/mt-perl-dynamic.cgi?uri=○○○
にアクセスした際はファイル名が表示されるので動作しているかとはおもうのですが、テンパってます。
>りあるさん
こんにちは。
症状からすると、移転先のブログで、サイトパスの設定が旧サーバーの値のままになっているのではないかと思われます。
ブログの設定を開き、「公開設定」のページの「サイトパス」の値を確認してみてください。
ご連絡ありがとうございます。
再度インストールし直したりしてルートパスの変更ができましが、
今度は
Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/local/php4/lib/php/:/tmp/phplib') in /usr/home/hoge/www/htdocs/mt-dynamic.php on line 181
と言うエラーがでます。
過去のコメントなどを参照し、mt-perl-dynamic.cgiが正常に動作していないということなのですが、
http://www.hoge.com/mt/plugins/PerlDynamic/mt-perl-dynamic.cgi?url=http://www.hoge.com/ファイル名
へアクセスすると、
ルートパス/phptemp/ファイル名.php
と表示され、phptempにもファイルが生成されているので、動作はしているようなのです。
何か弊害があるんでしょうか?
>りあるさん
こんにちは。
症状からすると、お使いのサーバーでは、phpのfile関数でHTTPアクセスすることが禁止されているのではないかと思います。
申し訳ありませんが、そのような環境ではPerl版ダイナミック・パブリッシングをご利用いただくことができません。
以下のスクリプトを「test.php」というファイル名で保存し、お使いのサーバーにアップロードして、「http://アップロード先/test.php」にアクセスしてみてください。
「ng」と表示されたら、file関数でのHTTPアクセスが禁止されています。
<?php
print(ini_get('allow_url_fopen') ? 'ok' : 'ng');
?>
素早いご返答感謝いたします。
早速ファイル作成及びアップロードを試みましたところ、「OK」と表示されました。
>りあるさん
このプラグインをインストールすると、インデックステンプレートの中に、「mt-perl-dynamic.php」というテンプレートができます。
そのテンプレートを開き、90行目付近を以下のように書き換えてください。
・変更前
if ($filename == 'Save page error') {
exit(show_error_message('再構築したファイルを保存するのに失敗しました。'));
}
・変更後
if ($filename == 'Save page error') {
exit(show_error_message('再構築したファイルを保存するのに失敗しました。'));
}
else if (!$filename) {
exit(show_error_message('ファイル名を取得することができませんでした。'));
}
また、87行目にある「$tmp = @file($req);」で、「@file」の前にある「@」を削除してください。
ここまでが終わったら、テンプレートを保存して再構築し、その後にブログにアクセスしてみてください。
もし、エラーメッセージや、「ファイル名を取得することができませんでした。」のメッセージが表示されたら、そちらのサーバーでは、PHPのセーフモードによる制限がかかっているものと思われます。
セーフモードがオンだとすると、mt-perl-dynamic.phpと、キャッシュのファイルとが、同じUID(ユーザーID)を持っていることが必要になります。
その場合は、お手数ですが、mt-perl-dynamic.phpと、キャッシュのファイルとが同じUIDになるようにするにはどうすればよいかを、サーバーの業者に問い合わせてください。
XServerを使用していて、MT4.1新規インストールの状態で、
「Perl版ダイナミック・パブリッシング」を使わせていただこうと
しているのですが…
「PerlDynamic」と「RebuildHelper」のフォルダを、
「plugins」ディレクトリにアップロードして、
ログイン画面(mt.cgi)にアクセスすると、404エラーが出て、
ページが表示されなくなります。
XServerは、PHPの仕様にクセがあるので、そのせいだとは
思うのですが、何か対策など思い当たるものがありましたら
アドバイスをいただけないでしょうか?
【参考】
http://www.xserver.ne.jp/faq_service_php.php#1
お手数をお掛けしますが、よろしくお願いいたします。
すみません。私のミスでした。
http://www.sixapart.jp/support/mt4/install/post_39.html
↑こちらの内容に従って、「mt-upgrade.cgi」を削除していたのを失念していました。
お騒がせしてしまって、申し訳ありませんでした。
DBの初期化までは正常に終わったので、これからプラグインの設定をしていきます。
取り急ぎ、ご報告まで。
>エヌさん
こんにちは。
404エラーは「ファイルが見つからない」というものです。
また、Perl版ダイナミックパブリッシングがPHPを使うのは、ブログのページにアクセスがあったときです。mt.cgiではPHPは使いません。
プラグインのファイルをアップロードしただけの段階で、しかも404エラーというなると、申し訳ありませんが原因は不明です。
さっそくのご返事をいただきまして、ありがとうございます。
先のコメントにも書きましたとおり、私のミスでした。
お手数をお掛けして、すみませんでした。m(__)m
その後の設定も無事に完了しました。
これからもお世話になりますので、今後ともよろしくお願いします。
さっそくのご返事をいただきまして、ありがとうございます。
書き込みの行き違いになったようですが、先にも書きましたとおり、
私のミスでした。
お手数をお掛けしまして、すみませんでした。m(__)m
その後の設定も無事に終わりました。
これからも、お世話になりますので、よろしくお願いいたします。
こちらのプラグイン便利そうだなあと思いアップロードしたのですが、うまく動作しませんでした。もちろん私のやり方がおかしいのだと思います。
それで、このプラグインを外して前の状態に戻したいのですが、どうすればいいのでしょうか?
FTPで「PerlDynamic」と「RebuildHelper」の2つのフォルダを削除しましたが、まだアクセスできないページがあったりします。
Parse error: syntax error, unexpected T_STRING in /home/domain/index.php on line 1
こんな表示がされるのですが、他に削除しなければいけないファイルなどがあるのでしょうか?
ブログ設定は「すべてのテンプレートを静的に構築する」に戻しました。
>ひよこさん
こんにちは。
エラーメッセージからすると、小粋空間のテンプレートをお使いなのではないかと思います。
そうであれば、「ヘッダー」のテンプレートモジュールの先頭に、以下のような行があると思います。
<?xml version="1.0" encoding="" ?>
これを、以下のように書き換えてください。
<?php print('<?xml version="1.0" encoding="<$MTPublishCharset$>" ?>' . "\n"); ?>
>壱さん、回答ありがとうございます。
動的ではなく、このプラグインを設定する前の状態に戻したいんです。小粋空間さんのテンプレートは使っておりません。一応教えていただいた部分の書き換えも試しましたが、やっぱり以下のエラーが表示されてしまいます。
Parse error: syntax error, unexpected T_STRING in /home/domain/index.php on line 1
このエラーは1行目がおかしいということなんですよね。1行目は
にしてます。Perl版ダイナミック・パブリッシングをアップし、設定する前まではこの1行目で問題なく表示されていました。
このエラーが出てしまうのは、まだ動的に動かすための設定が残っているとか、このプラグインを設定した時に自動的に作成されたファイルが存在しているということではないのでしょうか?
本当に無知ですいません。
設定した前の状態に戻したいんです。
すいません。上のコメントの1行目がなぜか表示されませんでした。
こうしてます。
また表示されませんでした。
つまり1行目はxml宣言文にしてるということです。
>ひよこさん
こんにちは。
ブログの出力先ディレクトリに「mt-dynamic.php」と「.htaccess」のファイルが残っていると思いますので、それらを削除してください。
また、その後にブログ全体を再構築して、各ページのHTMLを作り直してください。
>壱さん
.htaccessを削除したら元の状態に戻りました。
ありがとうございました。
お世話になります。
Perl版ダイナミック・パブリッシングを使用させていただいていております。
キャッシュをONにしている際、公開予約(公開日の日付に未来を指定)を組み合わせた際、動作の方はなにか気をつけるところはございますでしょうか?
現在、
cd /var/www/cgi-bin/mt; ./tools/run-periodic-tasks
をcron で設定し、キャッシュOFF時には正常動作を確認していたのですが、
キャッシュをONの時も同様に使用可能であればとても助かります。
何か情報がございましたらご教授いただけますと幸いです。
よろしくお願いいたします
>むさしさん
こんにちは。
プラグインご利用ありがとうございます。
ご質問の件について、記事の最後に追加しておきました。
壱さま
お世話になります。
迅速な返信いただきまして誠にありがとうございました。
頂きました変更を施しまして、
無事にキャッシュをONとの組み合わせで動作致しました。
大変ありがとうございました m(_ _)m
インデックステンプレートとして、あるTXTやxmlファイルを生成するテンプレートを作成しておいて、
(出力ファイル名のフィールドに xxxxx.txtなど)
”インデックステンプレートを再構築するとき、このテンプレートも再構築する”
にチェックを入れておきまして、
メインページ(index.php)に”このテンプレートをダイナミックページにする ”
にしておいたとき、
記事の投稿があったあと、index.phpページへアクセスがあったときに、
このテンプレートも連動してファイルを生成させることは可能でしょうか?
いくつか実験もさせていただいたのですが、うまく行くときと行かないときがあるような感じで座礁してしまいました・・・
もし注意すべきところや何か確認するべきところなどがございましたご教授頂けますと幸いです。
>むさしさん
こんにちは。
ご質問の件ですが、Perl版ダイナミックパブリッシングは、残念ながらむさしさんが期待されているような動作はしません。
アクセスがあったページのみを再構築するものです。
ちなみに、「インデックステンプレートを再構築するとき、このテンプレートも再構築する」のチェックボックスは、MT標準の静的な再構築のためのものです。
このチェックをオンにしたインデックステンプレートは、以下のようなタイミングで再構築されます。
1.ブログ記事を新たに公開したとき
2.ブログに新しくコメントがついたとき
3.ブログに新しくトラックバックがついたとき
4.ブログ全体を再構築したとき
>壱 さま
ご回答ありがとうございました。
>1.ブログ記事を新たに公開したとき
>2.ブログに新しくコメントがついたとき
>3.ブログに新しくトラックバックがついたとき
>4.ブログ全体を再構築したとき
▼
すみません、ありがとうございました。
先ほど書かせていただきました、うまくいったときと言うのは私の勘違いで、おそらく手動で再構築したときに更新されていたのだと思います・・・
今現在、実験も含めまして、、
先日変更点を教えて頂いた、公開予約のためにcronを使用しておりましたので、
ブログの公開設定にある、”バックグラウンドのキューを使って再構築を行う”との併用も考えています。
でちょっと負荷もふえそうでちょっと様子を見ないといけないと思いますが ^^;