動画やPDFをアップロードしようとしたら、「〇〇 は、このサイトのアップロードサイズ上限を超えています。」と出て、先に進めない。

この上限は、WordPressではなく、サーバーのPHPの設定で決まっています。この記事の2016年版で紹介していた functions.php の書き方は、試すと効きませんでした。そこに書いていた「upload_max_size」も、PHPには無い設定名です。


WordPressで記事販売ができる「YOMERU」
記事を、そのまま収益に。
WordPressサイトで記事の有料販売ができる
無料のプラグイン「YOMERU」。

まず、今の上限を確かめる

上限は、管理画面の2か所で確かめられます。

「メディアファイルを追加」の画面

「メディア」→「メディアファイルを追加」を開くと、「最大アップロードサイズ」(①)が表示されています。PHPの初期設定のままの検証サイトでは2MBでした。これより大きい3MBの画像を選ぶと、②のエラーが出ました。

最大アップロードサイズと、上限を超えたときのエラー

サイトヘルスの「情報」

「ツール」→「サイトヘルス」→「情報」の「メディア処理」を開くと、もう少し詳しく分かります。

サイトヘルスに出るアップロードの上限

項目 PHPの設定名 意味
① post データの最大サイズ post_max_size 1回の送信で受け取れるデータ全体の大きさ
② アップロードファイルの最大サイズ upload_max_filesize 1つのファイルの大きさ
③ 有効な最大ファイルサイズ - ①と②の小さいほう。実際の上限はこれ

WordPressの本体のコードでも、上限は「upload_max_filesize と post_max_size の小さいほう」で決めています。上げるときは、2つの設定を両方とも上げます。片方だけ上げても、もう片方で止まります。

サイトヘルスの使い方は、こちらで紹介しています。

サーバーの管理画面で上げる

レンタルサーバーなら、管理画面にPHPの設定があります。主なサーバーの設定画面は次のとおりです。

サーバー 変える場所
エックスサーバー サーバーパネルの「PHP」→「php.ini設定」で、ドメインの「詳細設定」を開く。「その他の設定」に upload_max_filesize と post_max_size がある
ロリポップ! ユーザー専用ページの「PHP設定」。upload_max_filesize を変えると、post_max_size も同時に変わる(CGI版のみ)
ConoHa WING 「サイト管理」→「サイト設定」→「応用設定」→「PHP設定」の「php.ini編集」の欄に書き足す
さくらのレンタルサーバ サーバーコントロールパネルの「スクリプト設定」→「php.ini設定」。memory_limit、post_max_size、upload_max_filesize の順に、大きいものから小さいものになるようにする

php.iniに書き足す場合は、次の2行です。数字は必要な大きさに変えます。post_max_size は、upload_max_filesize と同じか、少し大きくします。

upload_max_filesize = 64M
post_max_size = 64M

post_max_size のほうが小さいと、サイトヘルスの「ステータス」にも警告が出ます。変えたら、もう一度サイトヘルスの「情報」を開いて、値が変わったことを確かめます。

参考:php.ini設定で設定可能な項目について(エックスサーバー)、PHP設定(ロリポップ!)、PHPの設定をする(ConoHa WING)、php.iniの設定内容を変更したい(さくらのレンタルサーバ)

メモリの上限(memory_limit)も、同じ画面で変えられます。メモリ不足のエラーが出ているときは、こちらもあわせて見てください。

管理画面で変えられないときは「.user.ini」

サーバーの管理画面にPHPの設定が無いときは、WordPressを入れたフォルダ(wp-admin フォルダがある場所)に「.user.ini」というファイルを置く方法があります。中身は、上と同じ2行です。2016年版で紹介していた「php.iniを作って置く」方法は、今はこの .user.ini を使います。

.user.ini が読まれるのは、PHPをCGIやFastCGI(PHP-FPMなど)で動かしているサーバーだけです。初期設定では、変えた内容が反映されるまで最大5分かかります。

Localで作ったテストサイト(PHP-FPM、初期の上限は300MB)で試すと、ファイルを置いた直後に64MBに変わりました。

試すと効かなかった書き方、サーバーを選ぶ書き方

functions.php に ini_set を書く

テーマの functions.php に次のように書く方法が、以前のこの記事でも紹介されていました。

@ini_set( 'upload_max_size' , '50M' );
@ini_set( 'post_max_size', '50M' );

PHP 8.4で試すと、どちらも false が返り、値は変わりませんでした。upload_max_filesize と post_max_size は、プログラムの途中では変えられない設定です。PHPは、WordPressのコードが動く前にファイルを受け取り終えているためです。1行目の「upload_max_size」は、そもそもPHPに無い設定名です。

.htaccess に php_value を書く

php_value upload_max_filesize 64M
php_value post_max_size 64M

PHPのマニュアルでは、この書き方はPHPをApacheのモジュールとして動かしている場合のものです。LiteSpeedのサーバーでも読まれますが、PHPをCGIやFastCGIで動かしているApacheのサーバーでは使えず、サイト全体が「500 Internal Server Error」になることがあります(この記事では試していません)。

.htaccessを編集する前は、元のファイルを保存しておきます。

WordPressには、表示される上限を変えるフィルター(upload_size_limit)もあります。ただ、これで変わるのはWordPressの表示と判定だけで、PHPの上限は変わりません。なお、マルチサイトでは「ネットワーク管理」→「設定」の「最大アップロードファイルサイズ」も上限になります。

上限を上げても通らないとき

テーマのzipファイルなど、post_max_size を超える大きさのデータを送ると、送った内容が丸ごと捨てられ、「辿ったリンクは期限が切れています。」と表示されることがあります。この場合も、上の2つの設定を上げます。

PHPの設定を上げても「413 Request Entity Too Large」と出るときは、Webサーバー側(nginxなど)の上限です。これはサーバー会社にしか変えられません。

大きいファイルは、送るのに時間がかかって途中で止まることもあります。その場合は、同じ設定画面の max_execution_time(処理の最大時間)と max_input_time(受け取りの最大時間)も見直します。

上限そのものを上げられないときは、ファイルの側を小さくする方法もあります。画像なら圧縮し、動画はYouTubeなどに置いて埋め込みます。テーマやプラグインのzipなら、FTPで解凍したフォルダを wp-content の中に置けば、アップロードの上限は関係ありません。

まとめ

サーバーの管理画面で2つの値を必要な大きさにそろえたら、最初に断られたファイルをもう一度アップロードします。それでも通らないときは、出たエラーの文言で「上限を上げても通らないとき」の節を見てください。

世界最高品質のデザインの
WordPressテーマ集
WordPressテーマ「ISSUE」
WordPressテーマ「ISSUE」
人材不足を解決する求人採用サイトを。
WordPressテーマ「SEEED」
WordPressテーマ「SEEED」
Webサービスを販売するLP型テーマ。
WordPressテーマ「GENESIS」
WordPressテーマ「GENESIS」
スタイリッシュな企業サイトの決定版。
WordPressテーマ「SOLARIS」
WordPressテーマ「SOLARIS」
一流の企業のための一流の企業サイトを。