これはIISを普段から使っている人であれば常識の範囲なのでしょうが、
普段使ったことの無い私にはとても困りました。
と言うことで、いきさつと対応方法までを以下にまとめます。
環境
サービス : Azure
Webサーバ : IIS7
言語 : PHP5.4
DB : MySQL 5
したいこと
上記環境で実装したフォームから最大120Mのファイルをアップロード出来るようにしたい。
現象のおさらい
①PHPで稼働しているフォームからファイルをアップロード
②成功する場合と404のエラーが表示される場合がある
何故、成功する場合と失敗する場合があるのでしょうか。
404 = not Foundなのでページが存在しないと言う意味ですよね?
成功している場合もあるので404になるわけが無いはずなのに・・・
エラーログにも404って書いてあるけど、ログのURLを叩くとちゃんと遷移出来る。
とにかく思いつくものを手当たり次第、修正していくしかありません。
対応内容[失敗]
これについて以下の対応を行いました。
◆php.iniでファイルアップロードに関係する以下を変更
#メモリ使用量の上限
memory_limit = -1
#POSTデータの最大サイズ
post_max_size = 256M
#1ファイルあたりの最大アップロードサイズ
upload_max_filesize = 256M
詳しい説明は省くとして上記サイズでは
問題なく動くはずなのですがAzureに上げると動かない。。
状況は変わらず。
再度ネットで検索が続きます。
対応内容[成功]
調べた続けた結果ファイルアップロードの制御をIIS7も行っていることが判明。
しかもIISの許容しているファイルサイズをオーバすると強制的に404に飛ばす仕様らしいのです。。
これはヒドい。。。
ともあれ原因が分かったので対応していきましょう
サーバ英語ですいません。。
Windows管理ツールの[インターネット インフォーメーション サービス マネージャー]を選択
出てきたポップアップの許可されたコンテンツ最大長を256000000
※単位はbyte
これで上限が256Mに出来ました。
やっと一安心。
それにしても404はひどすぎます・・