サーバーで動かしていたPHPのプログラムで500エラーが発生してしまい、ブラウザで表示されなくなったので、原因と対策を調べてみました。
目次
HTTP エラー500 (Internal Server Error) の意味
500 Internal Server Error (サーバ内部エラー) の意味は以下の通りです。
これはサーバーのエラーなので、サーバープログラムを修正する必要があります。
PHPでheader関数を使って、500エラー 発生させる
PHPには、headerという便利な関数があります。
header
(PHP 4, PHP 5, PHP 7)header — 生の HTTP ヘッダを送信する
PHPでheaderを使って、500ページ(Internal Server Error)を表示する方法は下記の通りです。
1 2 3 |
<?php header('HTTP/1.1 500 Internal Server Error'); ?> |
このPHPをブラウザで起動すると、以下のようになります。
xxxx.php:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
.htaccessをおくだけで500 Internal Server Error
.htaccessをおくだけで「500 Internal Server Error」となることもあるようです。
原因として以下が考えられます。
①htaccessの記述ミス
PHPを使うための以下のような記述がされてなかったり等、いろんな要因が考えらます。
AddHandler x-httpd-php5 .php .phps
②パーミッションの設定ミス
chmodで、755にすればよいはずです。
PHP 500 返すと、真っ白で表示されない
PHPのプログラムで、エラー500を返すと、真っ白になって以下のように表示されます。
このページは動作していません
localhost では現在このリクエストを処理できません。
HTTP ERROR 500
PHP 500エラーのログは?
PHP 500のエラーはログから調べることが出来るのでしょうか?
Apache WEBサーバーでは、アクセスログとエラーログの2個のログを生成します。
ログの場所は、以下のような場所にあります。
/var/log/httpd/access_log
/var/log/httpd/error_log
PHP 500のエラーはエラーログではなくて、アクセスログに以下のように書かれます。
1 2 3 4 5 |
aaa.bbb.ccc.ddd - - [15/Aug/2018:14:58:08 +0900] "GET /xxx.php?type=list&action=form HTTP/1.1" 500 2 "https://aaa.bbb.ccc.ddd/xxx.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" |
残念ながら、これではエラーの原因はわかりませんね。
PHP 500エラー 表示されない?原因は?
PHPが500エラーを吐いても何が原因でエラーを吐いているのかわかりません。
そこで、頭に下記の一文を書くとエラー内容を表示してくれます。
1 2 3 4 |
<?php ini_set("display_errors", On); error_reporting(E_ALL); ?> |
これで、PHPでエラー500が発生すると、ブラウザでエラーの箇所を表示してくれるようになります。
コメント