WordPressMUはDreamhostだとすんなりインストールできます。ところが、レンタルサーバによっては不具合が多く発生します。特定の環境でOKだったからといって、テストもせずに他の環境での作業見積もりをするのはダメですね。勉強になりました(; ;)
原因を突き止めて解決するまで半日以上かかった問題もありました。chicappaというレンタルサーバにインストールしたのですが、sakuraでも同様の問題が発生すると思いますので、インストール方法と共に問題の症状と解決法も書いておきます。
【WordPress MU のインストール方法】
wordpress.orgからダウンロード。現在のバージョンは1.2.1でした。
1.2.1用の日本語リソースはWPMU Japanese language pack 1.2.1にあります。
ftpのアカウントとapacheでアクセスした場合のユーザが異なるとインストールディレクトリとwp-contentディレクトリのパーミッションを777に変更する必要がありました。ルートディレクトリのパーミッションはインストール後で755に戻す必要があります。
この状態でDBを設定してインストールを完了し、実際にブログを作成すると次のエラーが発生します。
WordPress database error: [Table ‘mydatabase.wp_2_options’ doesn’t exist]
SELECT option_value FROM wp_2_options WHERE option_name = ‘blogname’ LIMIT 1
WordPress database error: [Table ‘mydatabase.wp_2_options’ doesn’t exist]
SELECT option_value FROM wp_2_options WHERE option_name = ’siteurl’ LIMIT 1
WordPress database error: [Table ‘mydatabase.wp_2_options’ doesn’t exist]
SELECT option_value FROM wp_2_options WHERE option_name = ‘post_count’ LIMIT 1
データベースを確認してみても正常にテーブルは存在しています。原因がわからずはまりました(; ;)
色々と調べてみた結果、wp-includes/wpmu-functions.phpのwpmu_create_blog関数に次の一行を追加して解決しました。
// Need to backup wpdb table names, and create a new wp_blogs entry for new blog.
// Need to get blog_id from wp_blogs, and create new table names.
// Must restore table names at the end of function.
define( “WP_INSTALLING”, true ); ←この行を追加
if ( ! $blog_id = insert_blog($domain, $path, $site_id) )
return new WP_Error(’insert_blog’, __(’Could not create blog.’));
と思ったら WordPress MU の不具合のパッチを出しているサイトを発見しました。このパッチを当てても上記の不具合は解決するので、その方が良いでしょう。他にも「ブログ削除時にルートブログのアップローファイルが削除される」という不具合もこれで解決されます。このパッチを当てましょう。
次にwp-config.phpに次の一行を追加します。追加というか置き換えですね。
define (’WPLANG’, ‘jp’);
adminのパスワードを変更します。そして「site admin」→「Options」のDefault Languageをjaに変更します。同じページのPluginsチェックボックスにもチェックをつけて有効とします。ここで、インストールディレクトリのパーミッションを755に戻しました。また、複数のテーマをwp-content/themeディレクトリにインストールし、「サイト管理」→「テーマ」で許可したいテーマにチェックを入れておきます。
この状態で普通に使えるはずでした。ところが、色々と使っていると次の不具合が発生します。再現性100%のものもあれば、不定期で発生するものもあります。
- 記事投稿時にページが真っ白になる。
- コメント投稿時にページが真っ白になる。
- MU用の自作プラグインを有効にすると「重大なエラーが発生しました」と言われる。
- 「オプション」→「設定を更新」を実行すると<footer>から後のHTMLだけが返ってくる。
おそらくもっと使えばこれ以外にも不具合が出てくると思います。はっきりといって使いものになりません。Dreamhostでは問題ないのに、何故こんなにも違いがあるのだろうと戸惑いましたがインストールしなければいけない状況だったので、もう一度ソースから問題を探っていきました。
…長いことソースを追った結果「PHPのネイティブ関数 header(”Location: ~”); が機能していない」という事実を突き止めました。試しに wp-comments-post.php を次のように置き換えてコメントを投稿しても画面は真っ白です。
<?php
require( dirname(__FILE__) . ‘/wp-config.php’ );
header(”Location: “http://www.google.com”);
?>
WordPressMUで追加された wp-config.php から呼び出されるコードの中に間違えて空白や空行を出力している箇所があるのでしょう…。では何故DreamHostでは正常に動いているのかというとPHPのバッファの設定の問題でした。
output_bufferingを有効にしてやれば良いのです。output_bufferingとheader関数の関係はここに詳しく書いてあります。HTMLとして出力する文字列はバッファに貯めておいて、コードの後半でheader()関数を使っても先にヘッダとして出力できるようにしてやります。
インストールディレクトリの.htaccessに次の行を追加しました。ついでに今後も不具合が発生するかもしれないので、念のためにエラーメッセージを表示させるようにして様子を見てみようと思います。
php_flag output_buffering On
php_flag display_errors On
この原因を修正するだけで、一見関係なさそうな他の問題も一気に解決しました。間接的に関係していたのでしょうか?
WordPressMUは使用しているユーザの絶対数が少ないですし(特に日本では)実績も少ないです。日本でまともに運用しようと思うならかなり覚悟が必要な気がします。
追記
不特定多数のユーザからの自動ブログ登録を無効にするオプションてないみたい。自分でwp-signup.php を無効にするように中身を書き換えてやる必要がありました。