WordPressのファイルアップロードサイズの上限設定が反映されない際に見直すポイント

WordPressのファイルアップロードサイズの上限設定が反映されない際に見直すポイント

この記事を書いた背景

WordPressのメディア機能を使って10MB程度のファイルをアップロードしようと思ったのですが、上限が2MBと言われてアップロードできませんでした。

アップロードサイズ制限値を変更するためにPHP側の設定ファイルを編集しても、制限値が変わらずちょっとあせったのでその解決方法についてメモ。

原因

アップロードするファイルサイズの制限を設定する箇所は複数あるのですが、それぞれの値の大小関係をきちんと設定しないと動作しないのが原因です。

解決の方法

設定の変更はphp.iniなどで行いますが、設定すべき箇所は次の3つです。

  • upload_max_filesize アップロードされるファイルの最大サイズ
  • memory_limit スクリプトが確保できる最大メモリ
  • post_max_size POSTデータに許可される最大サイズ

これらの値は、次の順番で大きな値を指定する必要があります。

upload_max_filesize <= post_max_size <= memory_limit

この設定を変更する方法は次の3種類があり、サーバーによって使えるものが変わります。

php.iniを編集する

直接もしくは利用するphp.iniを指定できる場合は、次のように値を指定します。
連続して書かれているわけではありませんので、二重定義などにならないように注意してください。

memory_limit = 30M
post_max_size = 20M
upload_max_filesize = 10M

.htaccessを編集する

利用するディレクトリ直下の.htaccessに、次の設定を書き込みます。
.htaccessを配置すると、それよりも下層のディレクトリにも影響を及ぼしますので注意してください。
ディレクティブでファイル指定するなどの方法を取っても良いでしょう。

ただ、最近のレンタルサーバーでは使えるところが少なくなってきました。

php_value memory_limit 30M
php_value post_max_size 20M
php_value upload_max_filesize 10M

ini_set()を使う

アップロードを実行するプログラム内で、次のコードを実行すれば、そのスクリプトの実行時だけ設定を変更できます。

PHPの動作モードによって動作しなくなるのと、WordPressなどではコアファイルに手を入れることになるので、通常は選択肢に入らないかと思います。

ini_set('memory_limit', '30M');
ini_set('post_max_size', '20M');
ini_set('upload_max_filesize', '10M');

まとめ

サーバー自体で上限値が設定されている場合もありますので、レンタルサーバーなどではその設定値がどうなっているのかを確認した方がよいでしょう。

自分の場合はCORESERVERだったのですが、3つの設定値の大小関係がズレていました・・

え?Webサイトのバックアップ、してないの!?

いざという時には復旧までしてくれる
『ワードプレス外部バックアップサービス』

■3つの特長
・自分でやらなくて良い
・いざという時の復旧付き
・外部サーバーにバックアップ

コメントを残す