MTとは関係ないネタです。
swfuploadというJavascriptとFlashを組み合わせた、
ファイルアップロードの優れたインターフェースを提供するスクリプトが
公開されています。
これでアップローダを作ってある場所で使っていたんですが、
問題が発生。
アップロードできるものと出来ないものがある!
最初は、アップロードできるファイルの拡張子の設定がおかしいのかな?と
思っていたけれど、そこは問題なし。
file_types : "*.jpg; *.png; *.gif; *.jpeg",
というように、拡張子を設定します。区切り文字は「 ; 」セミコロン。
すべての拡張子を許可する場合は「 *.* 」とすればよろし。
で、これできちんと許可されているはずなのに、
アップロードできる場合と出来ない場合がある!
この原因がわかるのにしばらくかかって(1〜2時間)、
結局、ファイルのサイズが大きいと上がらなくて、
小さければOKということがわかった。
いろいろなサイズのファイルを作って、アップロードしてみたら、
どうも5MBのあたりに境界がある。
swfuploadにアップロードできるファイルのサイズを設定する項目はあって、
そこは100MBとかに設定してあるのに、5MBでひっかかる。
それでログを吐き出させて、何がダメなのか調べてみたら、
そもそもPOSTデータが何も送られていないことがわかった。
5MB以上のファイルの場合はPOSTのデータが何も送られていない。
そうしてやっと、これはswfuploadの設定やソースのミスの問題ではなく、
サーバー側の問題であるということに思い至る。
最初に疑ったのはApacheの設定で、アップロードできるファイルサイズを
制限している項目があるのではないか?ということだった。
確かにそれを設定するような項目はある。
http://it.cardinals-fan.com/archives/21
ためしに.htaccessファイルをフォルダにおいて、
LimitRequestBody 100MB
と書き込んでみたが結果はだめだった。
そもそもhttp.confでそれ以下に設定されていたら、
この設定が効かない可能性もあり。
この点に関してはこのブログのおいてあるレンタルサーバ(さくらインターネット)の
設定がそうなっている限り、
もはやなす術なし。
ということで、自分が完全に自由になるサーバーがあるので、
そちらでこの設定を変更してみる事にした。
が、http.confを見てもそのような項目は設定されていなかった。
にもかかわらず、大きいサイズのファイルはアップロードできなかった。
それで、違う要因でできないのではないか?と考えて、
今度はPHPの設定が関係しているのではないかということに思い至る。
http://www.teppi.com/helpfb/index.html?fbmansettingfileuploadmaxsize.htm
直接的には「upload_max_filesize」という項目が
アップロードするファイルの上限を決めている事になる。
さくらインターネットのレンタルサーバーでは、
それがどのようになっているか、phpinfo()を使って調べてみたところ、
memory_limit 128M
post_max_size 8M
upload_max_filesize 5M
という風になっていて、これで5MBが境界になっている理由がわかった。
phpの設定もやはりいじれないので、
自分でいじれるサーバーの方のphp.iniを書き換えて、
apacheを再起動したら、
今度は大きいサイズのファイルもアップロードできるようになった。
ちなみに、php.iniの項目を書き換える時、
memory_limit > post_max_size > upload_max_filesize
とするのが良い。
追記:できます!PHPでアップロードできるファイルサイズの上限を変えられます!さくらインターネットでも!