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
が最適解です。