はじめに
WordPressのメディアライブラリに画像をアップロードしようとしたら、こんなメッセージが出て止まった経験はありませんか?
- 「HTTPエラー」
- 「申し訳ありませんが、このファイルタイプはセキュリティ上の理由からアップロードできません。」
- アップロードバーが途中で止まる
- アップロードしても画像が表示されない
原因はひとつではなく、パーミッション・PHP設定・プラグインの競合・サーバー設定など複数のケースが存在します。
この記事ではエラーの種類別に原因と解決策を丁寧に解説します。
アップロードできない原因と対処法
1. 「HTTPエラー」が出る
アップロードバーが進んで最後に「HTTPエラー」と表示されるケースです。原因が広範囲にまたがるため最も厄介なエラーです。
原因1:PHPのメモリ不足
対処法:
wp-config.php に以下を追加します。
define('WP_MEMORY_LIMIT', '256M');
ただし、実際に効くかどうかはサーバー設定次第です。
優先順位(上が強い)
サーバー本体の設定(php.ini)
↓
.htaccess の設定
↓
wp-config.php の WP_MEMORY_LIMIT ← ここ
↓
WordPress のデフォルト(40MB)
つまり、サーバー側が「128M上限」と決めていたら、wp-config.phpで256Mと書いても128Mにしかならないです。WordPressがサーバーの上限を超えることはできません。
解決しない場合は php.ini の変更が必要です。
ホスティングの管理パネル(cPanel等)から確認してください。
原因2:画像編集ライブラリの問題(GD / Imagick)
WordPressは画像リサイズにGDライブラリまたはImagickを使用します。どちらかが正常に動作していない場合にHTTPエラーが発生します。
現在使用中のライブラリを確認する方法:
管理画面 → 「ツール」→「サイトヘルス」→「情報」→「メディア処理」で確認できます。
Imagickでエラーが出ている場合の対処法:
wp-config.php に以下を追加するとImagickによる画像編集の上書き保存を有効にし、動作が安定することがあります。
define( 'IMAGE_EDIT_OVERWRITE', true );
それでも解決しない場合は、ホスティング会社にImagickの動作状況を問い合わせるか、サーバーの管理パネルからImagickを再有効化してください。
補足: WordPress 6.3以降、GD LibraryとImagickを手動で切り替えるUIは廃止されました。現在はWordPressが自動で適切なライブラリを選択します。
原因3:セッションタイムアウト
長時間ページを開いたままアップロードしようとするとセッションが切れます。
対処法: ブラウザを更新して再ログインしてからアップロードを試みます。
原因4:プラグインの競合
セキュリティプラグインや画像最適化プラグインがアップロード処理を妨害していることがあります。
対処法:
- 全プラグインを一時的に無効化
- アップロードを試みる
- 成功した場合、プラグインを1つずつ有効化して原因を特定
2. 「このファイルタイプはアップロードできません」
セキュリティ上の理由でブロックされているケースです。
原因1:WordPressが許可していないファイル形式
WordPressはデフォルトで許可するファイル形式を制限しています。SVGファイルはデフォルトで許可されていません。
対処法(SVGの場合):
functions.php に以下を追加します。
/**
* SVGファイルのアップロードを許可する
* 注意: 管理者・編集者権限を持つ信頼できるユーザーのみが使用する環境で利用してください
*/
// SVGのMIMEタイプを許可リストに追加
function allow_svg_uploads( $mimes ) {
if ( current_user_can( 'manage_options' ) ) {
$mimes['svg'] = 'image/svg+xml';
$mimes['svgz'] = 'image/svg+xml';
}
return $mimes;
}
add_filter( 'upload_mimes', 'allow_svg_uploads' );
// WordPress 5.1以降のファイル検証チェックをパス
function fix_svg_mime_type( $data, $file, $filename, $mimes ) {
$ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
if ( $ext === 'svg' || $ext === 'svgz' ) {
$data['ext'] = $ext;
$data['type'] = 'image/svg+xml';
}
return $data;
}
add_filter( 'wp_check_filetype_and_ext', 'fix_svg_mime_type', 10, 4 );
このコードについて:
current_user_can( 'manage_options' )により、管理者権限を持つユーザーのみSVGをアップロードできますwp_check_filetype_and_extフィルターへの対応により、WordPress 5.1以降でも正しく動作しますsvgz(圧縮SVG)にも対応しています
注意: SVGファイルはJavaScriptを内包できるため、XSS(クロスサイトスクリプティング)攻撃のリスクがあります。
不特定多数がアップロードできる環境(会員サイト・マルチサイト等)では使用しないでください。
安全にSVGを扱いたい場合は「Safe SVG」などの専用プラグインの利用を推奨します。
原因2:ファイル名に日本語・特殊文字が含まれている
日本語ファイル名の画像はアップロードに失敗することがあります。
対処法: ファイル名を image-001.jpg のような半角英数字に変更してから再アップロードしてください。
3. アップロードはできるが画像が表示されない
アップロード自体は成功しているのに、記事やメディアライブラリで画像が表示されないケースです。
原因1:uploadsフォルダのパーミッションが正しくない
wp-content/uploads フォルダのパーミッションが適切でないと、ファイルは保存されても読み取りができません。
対処法:
FTPクライアント(FileZilla等)で wp-content/uploads フォルダのパーミッションを確認します。
- フォルダ: 755
- ファイル: 644
パーミッションが異なる場合は上記の値に変更してください。
原因2:.htaccessの設定が壊れている
対処法:
- WordPress管理画面 → 「設定」→「パーマリンク設定」
- 何も変更せず「変更を保存」をクリック
これで .htaccess が自動的に再生成されます。
原因3:キャッシュプラグインの影響
キャッシュが古い状態で残っているため、新しい画像が表示されないことがあります。
対処法: キャッシュプラグインのキャッシュをクリアします。W3 Total Cache・WP Super Cache・LiteSpeed Cacheなど、使用しているプラグインの管理画面から「キャッシュを削除」を実行してください。
4. アップロード容量の上限エラー
「アップロードされたファイルがサーバーの最大アップロードサイズを超えています。」というメッセージが出るケースです。
アップロード上限はPHPの設定値 upload_max_filesize と post_max_size によって決まります。これらはPHPの実行中に動的変更できない設定値のため、wp-config.phpの ini_set() では変更できません。 以下の方法で変更してください。
対処法1(推奨):ホスティングの管理パネルから変更
Xserver・ConoHa・さくらのレンタルサーバーなど、国内の主要サーバーはコントロールパネルのPHP設定画面から変更できます。サーバーの管理画面で「PHP設定」または「PHP.ini設定」を探してください。
対処法2:php.iniを編集
ホスティングのルートディレクトリまたは該当ディレクトリに php.ini ファイルを作成・編集します。
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
注意:
post_max_sizeはupload_max_filesize以上の値に設定してください。post_max_sizeが小さいとアップロード自体は受け付けても処理に失敗します。補足:
memory_limitはWP_MEMORY_LIMIT定数(wp-config.php)でも変更できますが、php.ini でまとめて管理するとわかりやすくなります。
対処法3:.htaccessに追記(mod_php環境のみ)
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value memory_limit 256M
php_value max_execution_time 300
重要な注意: この方法はApacheのmod_phpとして動作している環境でのみ有効です。現在の主要なレンタルサーバーはPHP-FPM(FastCGI)で動作しているため、この記述は無視されるか500エラーを引き起こす可能性があります。試す場合はバックアップを取ってから行い、500エラーが発生した場合は即座に削除してください。
5. アップロードフォルダが存在しない・書き込めない
「アップロードディレクトリが存在しないか、書き込み不可です」というエラーが出るケースです。
対処法1:フォルダを手動作成
FTPで wp-content/uploads フォルダが存在するか確認します。存在しない場合は手動で作成し、パーミッションを 755 に設定します。
対処法2:WordPressの設定からアップロードパスを確認・修正
管理画面 → 「設定」→「メディア」の「ファイルのアップロード先」が正しいパスになっているか確認します。デフォルトは wp-content/uploads です。空欄の場合も問題が発生することがあるため、明示的に入力して保存してください。
それでも解決しない場合のチェックリスト
上記の対処法を試しても解決しない場合、以下を順番に確認してください。
- ブラウザのキャッシュをクリアしてから再試行
- 別のブラウザでアップロードを試みる
- 別の画像ファイルでアップロードを試みる(特定ファイルの問題の可能性)
- テーマを一時的にデフォルトテーマ(Twenty Twenty-Four等)に切り替えて試みる
- セキュリティプラグイン(Wordfence、SiteGuard等)を一時無効化して試みる
- ホスティング会社のサポートに問い合わせ(サーバー側の制限の可能性)
WordPressのメディアアップロード関連の設定まとめ
| 設定ファイル | 設定できる内容 | 備考 |
|---|---|---|
wp-config.php | メモリ上限(WP_MEMORY_LIMIT) | upload_max_filesize / post_max_size はここでは変更不可 |
php.ini | アップロード容量上限、メモリ上限、実行時間 | 最も確実な方法 |
.htaccess | アップロード容量上限、メモリ上限、実行時間 | mod_php環境のみ有効。PHP-FPMでは効かない |
functions.php | 許可するファイル形式の追加 | — |
| サーバーパーミッション | uploadsフォルダの読み書き権限 | フォルダ755・ファイル644が基本 |
まとめ
WordPressで画像がアップロードできない原因は多岐にわたりますが、ほとんどのケースは以下のいずれかで解決します。
✅ HTTPエラー → PHPメモリ上限を増やす・プラグイン競合を確認
✅ ファイルタイプエラー → ファイル名を半角英数字に変更・許可形式を追加
✅ 画像が表示されない → パーミッション確認・.htaccess再生成・キャッシュクリア
✅ 容量エラー → ホスティングの管理パネルまたはphp.iniでアップロード上限を引き上げ
✅ フォルダエラー → uploadsフォルダを手動作成・パーミッションを755に設定
エラーメッセージをよく確認し、該当する原因から順番に試していきましょう。
