画像をアップロードしようとしたら「HTTPエラー」と表示されて、アップロードできない….
どうすればいいんだろう?
WordPressで画像をアップロードしたときに「HTTPエラー」と表示されるエラーの原因と解決法について解説していきます。
アップロード画像によって「HTTPエラー」が出たり出なかったりして、いまいち原因が分からないですよね。
先に結論を言うと、この「HTTPエラー」が表示される原因は「画像のアップロードにかかる時間が長すぎるから」。
記事内では詳しい原因と解決方法を説明していきますね。
「HTTPエラー」が出て、画像のアップロードができなくて困っている人は参考にしてください。
HTTPエラーの原因は画像のアップロード処理限時間越え
画像をアップロードした時に起こるHTTPエラー。
記事投稿のページだとただ単に「HTTPエラー」とだけ表示されるので、何のことか分かりにくいですよね。
ダッシュボードの「メディア」の「新規追加」から画像をアップロードすると、詳しいエラーの原因が表示されます。
そこを見ると、「Fatal error: Maximum execution time of 30 seconds exceeded in /○○(問題があるファイルの場所)」と表示されています。
このエラーは問題が起きているファイルの場所が問題なのではなく、
という箇所が重要です。
日本語に訳すと「致命的なエラー:最大実行時間である30秒を超えています」となります。
この30秒とはアップロードの処理の制限時間で、この場合だと「設定されていた30秒を超えたために処理が止まり、HTTPエラーになった」ということになります。
HTTPエラーが起こるのは無限ループ対策のため
なんで、こんな制限があるのかというと、PHPのミスコードによる無限ループ対策のためです。
この制限がないと、ずっと処理をし続ける無限ループが起こってしまった時に、永遠に処理を続けてサーバーに負荷がかかり続けてしまいます。
そのような無限ループをを避けるために事前にPHPの処理の制限時間を設定しているのです。
実際にHTTPエラーが出ている人であっても、画像サイズが小さいものをアップしてみるとエラーは起こらないと思います。
これは、画像サイズが小さいので、負荷が小さく、制限時間内にアップロードの処理が完了するからです。
画像アップロード時のHTTPエラー解決方法
HTTPエラーの原因が「アップロードの処理時間を超えてしまったから」ということは分かったと思います。
なので、HTTPエラー解決方法の方法は以下の2つです。
基本的に1つ目のアップロードの制限時間を長くするだけで解決しますが、両方やることをおすすめします。
アップロードの制限時間を長くする(php.iniの値を大きくする)
まず「アップロードの制限時間を長くする方法」から説明します。
処理時間を変更するには、WordPressをインストールしているサーバーの「php.ini」というファイルを変更する必要があります。
ただし、php.iniのファイルは非常に重要なファイルのため、PHPのコードを良く知らない人は、他のコードを誤って消してしまったりするリスクも。
そのため、基本的にレンタルサーバー側で簡単に設定できるようになっています。
今回はエックスサーバーの画面を使って、説明していきます。
まず、エックスサーバーのサーバーパネルにログインします。
中央下部の「php.ini設定」に進みましょう。
設定対象ドメインを選択していない場合は、「ドメイン選択画面」が表示されるので、変更するドメインを選択します。
ここからは「php.ini設定変更」と「php.ini直接編集」という2つのページを切り替えることができるようになり、どちらからでも変更することができます。
この記事ではどちらも紹介しますが、ミスしにくいという理由から、最初に紹介する「php.ini設定変更」から数値を変更することをオススメします。
「php.ini設定変更」から数値を変更する
「php.ini設定変更」に進み、「max_execution_time」の箇所を数値を変更します。
初期設定では「30」になっているので、これより数値を大きくしましょう。(「30」は30秒のことです)
ただ、数字が大きすぎればいいというものではありません。
数字が大きければ、それだけ処理にかかる時間の上限が大きくなります。
圧縮をせずに高画質な画像を日常的にアップロードする人は「120」などと数値を大きくした方がいいと思いますが、ほとんどの人は、初期設定の倍である「60」へ変更するだけで充分です。
「php.ini直接編集」から数値を変更する
php.ini設定変更の横にある「php.ini直接編集」という場所からでも、数値を変更することができます。
こちらも「max_execution_time」と書かれている数値を変更します。
max_execution_time = 60
このように数値を変えることで、上限を変えることができます。
書き換える時に、他のコードを消さないように気をつけましょう。
max_execution_timeの数値を「0」にすると、制限時間が無制限となります。
万が一無限ループが発生してしまうと、永久に処理し続けることになり、サーバーに高負荷がかかるので「0」と設定しないようにしましょう。
画像サイズを小さくしてアップロード時間を短くする
つづいて2つ目の方法、アップロードにかかる時間が長すぎるのであれば、できるだけ短くしてしまおうという方法です。
1つ目の方法だけで解決しますが、こちらもやることでHTTPエラーの解決だけでなく、表示速度の改善にもなります。
やることは、WordPressに画像をアップロードする前に、画像圧縮ツールを使ってファイルサイズを小さくするだけ。
「JPEGmini」が有名ですが、個人的には無料で使える画像圧縮ツールの「Image Optim」がおすすめです(MACユーザーのみ)。
また、PNG形式の画像ファイルは重たいので、背景が透明じゃないといけない画像以外はPNGからJPEG形式に変換しましょう。
JPEGに変換するだけで、かなり画像サイズは小さくなります。
HTTPエラーの原因と対処方法まとめ
HTTPエラーはアップロードにかかる制限時間を超えたために起こるエラーで、今回はその上限を上げることによって解決しました。
この設定は一度変更すれば、ずっとそのままなので、サクッと変更しちゃいましょう。
そして、日頃から画像サイズは小さくしてアップロードするようにしましょう。