WordPress でアップロードした画像が表示されない問題に困る修行
日本語版 WordPress 3.0.4 をインストールした。特に難しいこともなくインストールでき、記事の投稿も問題なくできた。ように見えて、画像がアップロードできないという問題が発生した。
エラーメッセージは次のとおり。
“mikan.jpg” は、エラーのためアップロードに失敗しました ディレクトリ /home/httpd/vhosts/peke.jp/httpdocs/blog/wp-content/uploads を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか ?
FTP クライアントで確認すると、確かに wp-content に og の書込み権限がない。ので、og+w してもう一度アップロードを試みた。
すると今度は次のエラーが発生した。
“mikan.jpg” は、エラーのためアップロードに失敗しました アップロードしたファイルを/home/httpd/vhosts/peke.jp/httpdocs/blog/wp-content/uploadsに移動できませんでした。
FTP クライアントで確認すると wp-content に uploads というディレクトリが作成されている。パーミッションは 777。いろいろさんざん試してみて、ようやく原因がわかった。
当該サーバでは PHP が safe mode で動いている。safe mode だと、実行スクリプトのオーナーと違うオーナーのディレクトリにはファイル移動が禁止される。らしい。uploads は apache が作ったのでオーナーも apache になっている。
ということで、apache が作った uploads ディレクトリを削除。FTP クライアントで uploads ディレクトリを作りなおした。
今度はエントリの編集画面で、画像のアップロードができるようになった。ところが、実際にエントリを表示してみると、アップロードした画像が表示されない。HTML を見てみると img の src が "../wp-content/uploads/mikan.jpg" になっている。絶対パスに直すと http://peke.jp/wp-content/uploads/mikan.jpg になるが、そんなところにファイルはない。試しに FireBug で img の src を "wp-content/uploads/mikan.jpg" に変えると画像が表示された。
これはお手上げだな、と思ったけれど、WordPress は画像のアップロード先を明示的に指定できるようなので、それを試してみることにした。
管理画面の [設定]->[メディア] の「アップロードするファイルの保存場所」をデフォルトと同じだが、明示的に「wp-content/uploads」とした。「ファイルへの完全な URL パス」は「http://peke.jp/blog/wp-content/uploads」とした。
これで試したところ、画像が表示されるようになった。