staticなクラス変数は参照のみということを知りました。
うーん。。。しょうがないのでglobalにします。
Archive for 1月, 2007
一通りblogの引っ越しも終わりました。。。
ようやくkwLog公開です。
でも記事自体は2001年からあるのでSince 2001としました。
とりあえず10年を目標にがんばってみよう。
VOXからも移行完了。AtomAPIの使い方がわからず
フィードバックから送信しちゃいましたが・・・
AtomFeedからふつーに読んでいけました。。。
so-net blogからの移行にも成功。移行するためのプログラム書きました。
http://labs.makotokw.com/blog2mt/
においておきます。
過去のblogを全部とりこんだところ1000エントリーを超えました。再構築がめっちゃ遅い。仕方がないのでダイナミック・パブリシングをオンにします。
さて、ダイナミック・パブリッシングでは「テンプレートタグを拡張するプラグインが動作しない」
という致命的な弱点があります。・・・というのをよく聞くのですが、結局のところ”テンプレートタグを拡張するプラグイン”というのが何を指してるのかわからないのです。
またPHP化でincludeしているとうまくいかないとも言います。全く意味がわかりません。だってダイナミックパブリッシングはPHPで動くのにPHPのincludeができないって・・・どういうこと。
とにかく押せ押せでやってみるのです。
とにかく遅いのは、日付とエントリーなのでテンプレートごとに個別に選択するようにして以下のテンプレートをダイナミックにします。
-日付アーカイブ
-エントリー・アーカイブ
で、別にディスク容量はたんまりとあるのでキャッシュを有効にします。以下のMovable Type 3.3のマニュアル通りに、cacheフォルダの作成と$mt->caching =true;の追加を行います。
ページ・レベルのキャッシング
ダイナミック・パブリッシングを最適化する別の方法は、ページ・レベルのキャッシングを有効にすることです。この機能によって、ダイナミック・パブリッシングは、1つのリクエストから次のリクエストに移行する間、ファイル・システムにキャッシュされるので、スタティック・ページに近いスピードが得られます。長期的に見ると、これはディスク・スペースをより多く消費しますが、性能上の利点があります。ページ・レベルのキャッシングをオンにするには、ブログのルート・ディレクトリにcacheという名前で新しいディレクトリを作成し、パーミッションを777(rwxrwxrwx)に設定する必要があります。次に、Dynamic Site Bootstrapperテンプレートに次の行を加えます。
$mt->caching =true;この行は$mt->view();の行の上に加えてください。この行を削除すると、キャッシング・オプションが無効になります。
修正後に再構築すると、ダイナミック・ページを表示するときに、作成したキャッシュ・ディレクトリ内にキャッシュするようになります。キャッシュされたあとは、ブログ・コンテンツがそのキャッシュされたページより新しい場合、またはリクエストを受けた場合に限り、1ページずつ再構築されます。
しかし以下のエラーがでました。
ページが見つかりません。
include_once({{MTBlogSitePath}}toolbar.php) [function.include-once]: failed to open stream: No such file or directory
{MTBlogSitePath}}が展開されていないようです。toolbar.php自体はダイナミックじゃないテンプレートから生成されたものなのでMTのタグは入っていません。{{MTBlogSitePath}}が悪いとみました。
toolbar.phpはmtview.phpと同じフォルダにあるので
include_once(‘toolbar.php’);
にしちゃいました。
これでうまくいったものの。。。いろいろ問題が・・・最近のエントリーの表示がおかしいのと
仕方ないのでデバッグしました。
どうも、php/lib/mtdb_base.php の 512行目からの$orderの設定がおかしいです。
$order = 'desc';
if (isset($blog) && isset($blog['blog_sort_order_posts'])) {
if ($blog['blog_sort_order_posts'] == 'ascend') {
$order = 'asc';
}
}
if (!isset($order)) {
$order = 'desc';
if (isset($blog) && isset($blog['blog_sort_order_posts'])) {
if ($blog['blog_sort_order_posts'] == 'ascend') {
$order = 'asc';
}
}
}
if (!isset($order))のif文には絶対入りません。
上記の15行を以下に置き換えてみると直ります。
if (!isset($args['sort_order'])) {
$order = 'desc';
if (isset($blog) && isset($blog['blog_sort_order_posts'])) {
if ($blog['blog_sort_order_posts'] == 'ascend') {
$order = 'asc';
}
}
} else {
$order = ($args['sort_order'] == 'ascend') ? 'asc' : 'desc';
if (isset($blog) && isset($blog['blog_sort_order_posts'])) {
if ($blog['blog_sort_order_posts'] == 'ascend') {
$order = ($order == 'asc') ? 'desc' : 'asc';
}
}
}
多分、こういうことがしたかったのでは。。。
これで、
PHPではエラーが発生するときに呼び出すfunctionをset_error_handlerで設定できます。
まだまだPHPでtry-catch方式でエラーハンドリングを行っている方は少ないと予想していますが、
try-catchで統一するための方法が以下にありました。
http://www.alexatnet.com/Blog/Index/2006-10-18/php-coding-tip-convert-notices-and-warnings-into-exceptions
function errorHandler($errno, $errstr, $errfile, $errline) {
throw new Exception($errstr, $errno);
}
set_error_handler('errorHandler');
try {
file_put_contents('cosmos:\\1.txt', 'asdf');
} catch (Exception $e) {
echo $e->getMessage();
}
これで、PHPのエラーが起きたときに例外を発生させることが可能です。
どうでもいいことですが、Vista UltimateのRC1(Build 5600)で
IE7でアクセスするとUserAgentが”Media Center PC 5.0;”なっていました。
いじょ。