WordPressでメディアライブラリに画像をアップロードしようとしたとき、HTTPエラーが発生してアップロードできなかった経験はありませんか?
目次
PHPの最大実行時間が足りないことが原因
多くの場合、PHPの最大実行時間が短すぎてアップロードの途中でプログラムが中断してしまうことが原因です。
WordPressを動かしているプログラムはPHPで書かれており、画像のアップロードもPHPが行っているのですが、セキュリティ上の理由から、1回のアップロードでPHPを実行し続けることができる時間に上限が設定されています。
たとえばエックスサーバーでは初期値として60秒が設定されています。
この設定を変更して、上限を60秒→300秒のように引き上げると、アップロードできるようになる場合があります。
しかし、ウェブサイトの保守を行う立場にある人ならば、きちんとサーバーのエラーログを見て、本当にそれが原因なのかどうか事実関係を確かめてから設定変更を試すべきです。
エックスサーバーでエラーログを確認する方法
WordPressのシステムであるPHPのプログラムはウェブサーバーが動かしているので、WordPress内でHTTPエラーが発生した場合は必ずサーバーにエラーログが記録されているはずです。
エラーログを自分の目で見れば、「いつ、どこでHTTPエラーが発生したのか」だけでなく、「どのプログラムの、何行目で」といった詳細情報がわかることが期待できます。
そこで、エックスサーバーのサーバーパネルにログインします。
左メニューの「エラーログ」をクリックすると、エラーログをダウンロードできるページが開くので、「ダウンロード」ボタンをクリックしてログのファイルをダウンロードします。
エラーログは1行に1つずつ、ファイルの上から下に向かって時系列で書き込まれているので、およそHTTPエラーが発生したと思われる時間帯を注意深く見ていきます。
上の例では、PHP Fatal error: Maximum execution time of 60 seconds exceeded…とあります。
英語が嫌だという人は、自分で対処するのはあきらめて、専門家に相談したほうが早いかもしれません。
直訳すると、PHPの致命的エラー:最大実行時間の60秒を超過しました・・・
このことから、3つのことがわかります。
- PHPの実行時間が現在は最大60秒に設定されていること
- PHPの実行時間が足りないことが原因でエラーが発生したこと
- PHPの実行時間を十分に長くすればエラーが発生しなくなると考えられること
エックスサーバーでPHPの実行時間を変更する方法
PHPの動作に関する設定は、ウェブサーバー内の php.ini という設定ファイルに書き込まれています。エックスサーバーでは、この php.ini を直接編集することができます(ただし自己責任ですが)。
サーバーパネルの左メニューから「php.ini設定」をクリックします。
php.ini の編集欄を開き、max_execution_time = 60 を max_execution_time = 300 に書き換えて保存します。
これでメディアライブラリへの画像アップロードでHTTPエラーが発生しなくなる場合があります。
なぜPHPの実行時間に制限が設けられているのか?
不正アクセスやアカウントの乗っ取りを企てる攻撃者は、プログラムを使って短時間に連続で何回もサーバーにアクセスしたり、非常に重いデータを送りつけたりして、サーバーに負荷をかけようとします。
そのため、アクセス1回あたりの通信時間に「最大60秒まで」というように制限を設けておかないと、ずっとサーバーに負荷がかかりっぱなしの状態になり、あなた自身がWordPressにログインできなくなったり、一般のユーザーがあなたのサイトを見るためにアクセスしても、いつまでたってもサイトが開かないといった問題が起きてしまいます。
このような合理的な理由があってサーバーにはいろいろな制限がかかっています。
WordPressで突然エラーが発生したら
もしあなたがWordPressを使っていて突然エラーが発生してしまった場合は、慌てずに「原因」を調べることを考えましょう。サーバーに関する専門知識がなくて何をしたらよいかわからない場合は、専門家に相談しましょう。
自分で解決できそうにないことに何日も悩まないでください。時間だけが過ぎていき、1ミリも解決に近づきません。
たとえばあなたの時給が3,000円だとして、10時間悩んだとすると、3万円も損をしたことと同じです。
WordPressに詳しい専門家に相談すれば、たった数時間で、1万円以内で解決できる場合も少なくありません。
どちらが損を少なく抑えられるのか、あなたの大切なお金に置き換えて考えてみましょう。