HTTP ERROR 500の原因と解決方法案

公開日: : MySQL, PHP

スポンサーリンク

 PHPをいじっていたら「HTTP ERROR 500」に遭遇して数時間の格闘の結果解決したのでそのときのメモを残しておきます。

HTTP ERROR 500とは

 Wikipediaの「HTTPステータスコード」に記事によるとサーバー内部のエラーを表しているようです。ただし、今回は「Internal Server Error」とは出ていないのでサーバが落ちているわけではないのかなと思いましたが、コードが同じなので意味合いは同じなのかと思います。

原因一覧

 インターネットで原因を調べてみると主に以下のものがあげられるようです。

・文法ミス
・ファイルのパーミッションミス
・ファイルの文字コードミス
・htaccessミス
・言語のバージョンミス
・アクセス過多

おおむね単純な文法ミスやローカル環境と本番環境の違いなどが考えられるのかなと思います。文法ミスの場合はphp.iniやソース冒頭に以下の設定をすることでエラーやワーニングを確認できるようになります。ただし、修正後はエラーやワーニングが表示されないよう戻しておくのが良心的です。(たまにPHPのワーニングらしきものが表示されているサイトを見かけます。忘れがちのため注意。)

<?php
ini_set( 'display_errors', 1 );
ini_set( 'error_reporting', E_ALL );

また、環境を一切変更していないのに急に500が出たという場合はアクセス過多が原因かもしれないためアクセスログをチェックしてみてもよいと思います。

さくらサーバのエラーログのチェック

 さくらサーバの例を取り上げると「アプリケーションの設定」→「アクセスログの設定」のページの「エラーログ」というリンクから見ることができます。

今回ここで確認はしましたが原因は見つけることができませんでした。ただし、ここで原因が見つかった場合はそのエラーが無くなるよう対処すればよいです。

メモリ不足が今回の原因

 エラーログやブラウザ上に何もエラー表示が出なかったため特定に時間がかかりましたが、今回の原因は先ほど挙げたもののいずれでもなく単純にメモリ不足でした。処理の途中でデータベースから表を引っ張ってきて配列に収める箇所があったのですが、テーブルのレコード数がいつのまにか増えすぎたためその配列のサイズが大きくなり、落ちるようになっていたようです。データベースの呼び出し方法を工夫したところ正常に動作するようになりました。

まとめ・感想

 今回原因は非常に単純ですが解決するのにとても時間をかけてしまいました。このようなことを起こさないためには将来的に不具合が起こらないように挙動を想像しながらプログラムを書き進めていく必要があるなと思いました。
 また、500系に限らず原因となる候補をリストアップしていき一つ一つつぶしていくことが一番近道なのかなと改めて思いました。上記の原因一覧にはどれも当てはまらなさそうだなと思ったためメモリ不足という発想に至ることができたためです。

スポンサーリンク
Amazon

  • このエントリーをはてなブックマークに追加

関連記事

[Python3]Webスクレイピングで繰り返し構造のデータを取得する

Python3のBeautifulSoup4でWebスクレイピングをし

2D写真から立体視画像を作成してみた

 カメラなどで撮影した写真からデプス(距離)画像を推定する技術でステレ

ディープラーニングの単眼画像Depth推定を試す

前々から気になっていた写真から立体を推定するCNNのディープラーニン

PyCharmとAnacondaの仮想環境を連携する手順

 PyCharmはデフォルトで仮想環境はVirtualenvを使うよう

【Python】正規表現で括弧で特定の文字列を抽出する方法

Pythonの正規表現で括弧を使って文字列を抽出するサンプルを作成しま

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。