WordPress小ネタ集④:大容量ファイルアップロード時の設定(.user.ini編)

パソコン

WordPressを使っていると「大きな動画や画像をアップロードしたいのにエラーになる…」という経験、ありませんか?
これは PHP の アップロード制限がデフォルトでは低めに設定されているのが原因です。

今回は、特定ディレクトリだけ設定を変えられる便利な方法「.user.ini」を使った対処法を紹介します。


スポンサーリンク
スポンサーリンク

1. なぜ .user.ini なのか?

通常は php.ini や PHP-FPM の設定を直接いじりますが、これは サーバー全体に影響します。
一方で .user.iniディレクトリ単位で設定できるため、例えば「wp-admin だけアップロードサイズを大きくする」といった柔軟な運用が可能です。

  • 変更が気軽(root権限不要)
  • 設定範囲を絞れる(影響範囲を限定できる)
  • 調整が多い時期にも最適

2. 設定ファイルを作成

対象ディレクトリ(WordPressなら /wp-admin)に .user.ini を作成します。

/var/www/html/wordpress/wp-admin/.user.ini

中身は例えばこんな感じ:

upload_max_filesize=512M
post_max_size=544M
max_execution_time=300
max_input_time=300

各設定の意味

  • upload_max_filesize : 1ファイルあたりの最大サイズ
  • post_max_size : POSTリクエスト全体の最大サイズ(ファイル+フォームヘッダ分を考慮し upload より少し大きめに)
  • max_execution_time : 実行可能な秒数(秒数が短いとタイムアウト)
  • max_input_time : 入力データをパースする上限秒数

3. 設定を反映させる

.user.ini は PHP-FPM が **数分ごと(デフォルト5分)**に自動で再読込します。
すぐ反映させたい場合は以下を実行:

sudo systemctl reload php-fpm

4. 反映確認の方法

テスト用に check-ini.php を作成します:

<?php
foreach (['upload_max_filesize','post_max_size','max_execution_time','max_input_time'] as $k) {
  echo $k, '=', ini_get($k), "<br>";
}

これを /wp-admin/check-ini.php に置いてブラウザでアクセスすればOK。
確認後は削除してください。


5. 注意点

  • Apache側の制限
    LimitRequestBody が設定されていると Apache でブロックされます。確認しておきましょう。
  • PHP-FPM側の制限
    request_terminate_timeout が短いとアップロードが中断されます。こちらも 300s に。
  • ディスク空き容量
    一時ファイルは /tmp に保存されるので十分な容量が必要です。

まとめ

  • 大容量ファイルをアップするには PHPの制限値を調整する必要があります。
  • サーバー全体を変えるのではなく、.user.iniでwp-adminだけ拡大するのがおすすめ。
  • 確認は ini_get() で必ずチェック。

「ちょこちょこ調整が多い」「本番サーバーに影響を出したくない」という方には、.user.ini が最適解です。