waka8*stakes

〜馬絵+林檎+Wordpress〜

WordPress for Androidで画像がうpできない件が解決した件

upload-impossible

XREA/コア鯖といったらセーフモード

ものすごく基本的な事を忘れてました。

PHPアプリ(この場合はWordPress)側から作られたディレクトリはその権限がApacheなってしまい、そのディレクトリに対してはアプリ側からファイルのアップロードができない状態になってしまう

XREAのセーフモード対策 – おじさんの備忘録-番外編-

WordPressを入れたときにはばっちしセーフモード対策して画像アップロードを不自由無く出来るようにしてたのですがw

WordPressアプリからブログに書き込むのは誰?

スマートフォンアプリに限らずPCでも管理パネルではなく外部ブログエディタからWordPressブログを更新出来るのはXML-RPCのお陰です。WordPressなら”/WordPress本体ディレクトリ/xmlrpc.php“を使います。管理パネルの投稿設定でXML-RPCを有効にしておく必要があります。

もちろん有効にしてました。文字はちゃんと反映されるのに画像だけがアップロードされてないので原因が今まで分からず設定をいじくり回したり、画像ビューワから『共有』でWordPressアプリに投げずに直接WordPressアプリを開いてアップロードを試みたりしてみたけどやはりだめでした。

やっぱりセーフモードのせい

そう思ってFTP(Cyberduckから)でWordPressの”uploads/年別”ディレクトリにアクセスしてみました。今月分のディレクトリは出来上がってたのですが情報を見てみると所有者がapacheになっておりました。セーフモードで動いてるphpプログラムが作ったファイルやディレクトリの所有者はapacheになってしまい、phpプログラムはapache名義のファイルやディレクトリを変更する事ができなくなってしまいます。

それを削除して自分の手で月別フォルダを作り、パーミッション707で書き込み可能に設定した後にWordPress for Androidで画像を添付して記事を保存すると無事に画像のアップロード成功。そういえば、過去には難なく画像をうpできた記事もあったな。とは思ってたのですが。

月初めで画像がなかったからxmlrpc.phpがapache名義で月別ディレクトリを作ってしまいました。だから画像がうpできなかったのです。うpできてた月は管理パネルから画像をうpし、CGIとして動いているasync-upload.phpが作成した管理人名義の月別ディレクトリがすでにあったからなのです。

結論

しておいた方がいいこと

  1. xmlrpc.phpをCGIとして動かす

    WordPress本体のディレクトリにある.htaccessに

    <Files xmlrpc.php>
    AddHandler application/x-httpd-phpcgi .php
    </Files>
    

    と書いて保存するとxmlrpc.phpがCGI版PHPとして動きますのでセーフモードに引っ掛かって泣く事はないです。これは絶対にやっておきましょう。やらないとセーフモードのまま動いてるxmlrpc.phpがアップロードしたファイルが全部apache名義になってしまいます(XREA、Coreserverの管理画面のツール
    『ファイル所有者の修正』を実行すれば管理人のアカウント名義になります)。

  2. FTPで月別ディレクトリをあらかじめ作成して書き込み可能なパーミッションに設定しておく

    私はこれを先にやってしまいました。試しにFTPで月別ディレクトリ作ったら画像がアップロードされてたのでそのままxmlrpc.phpをCGIで動かさずに放置してしまいました。でもこれだけでは不十分で(WordPressアプリを使ってアップロードされたファイルはapacheさんの名義)やっぱり1を施さないと駄目です。

  3. 年別、月別ディレクトリを作成しない設定にしておく

    ブログを始める前に管理画面の『設定>メディア』のファイルアップロードの項目で『アップロードしたファイルを年月ベースのフォルダに整理』のチェックを外しておきます。デフォルトではチェックが入っています。uploadディレクトリ直下に画像が入るので年や月が変わる毎にいちいちディレクトリを作成しなくても、uploadディレクトリひとつ作っておけば良いので月が変わる度に「画像がうpされないお(´・ω・`)」と泣かなくていいので楽です。うちなんかだったら月別に整理しても意味が無いので始めからこうしとけばよかったと後悔してます。

昨年公開してから月別ディレクトリを作ってきたので3はもう遅すぎと思い1と2を施しました。XREAとかCoreserverでこれから新しくWordPressブログを始めるなら3の方法をやってから念のためFTPでuploadsディレクトリを作ってパーミッションを707にしておくとあとあと楽にブログ更新できます。もちろんwp-admin/async-upload.php(管理画面から画像をアップロードするのはこれ)もCGIで動かす事も忘れずに…。