PHPで動くwebシステムを構築していたのですが、レンタルサーバの引っ越しに伴い、そのシステムを移行する必要が生じました。単純にプログラムをコピーしたら動くだろうと考えていたのですが、そう甘くはありませんでした。発生したエラーと解決した方法を備忘録としてまとめておきます。
表示されたエラーメッセージ
新しくmixhostというレンタルサーバを借り、そこにPHPで動くwebシステムをコピーして動かしてみたところ下図のようなエラーが出ました。
webシステムのログイン画面は表示されたのですが、そこでユーザ名とパスワードを入力してログインボタンを押して、次画面に遷移しようとしたところでこのエラーが出ました。ログイン画面が表示されていましたので、PHPは動いているようですが、画面遷移のタイミングで何らかのエラーに止まってしまったようです。
さて、この画面をよく見てみると「HTTP ERROR 500」と書かれています。この「HTTP ERROR 500」を調べてみますと「Internal Server Error」などと呼ばれることもあり、サーバ側で発生したエラーのようです。
エラーの原因を特定する
.htaccessの記述が間違っているためにこのエラーが表示されることがあるようですが、今回はログイン画面が正しく表示されていますので .htaccess 正しく記述されているだろうと判断しました。
次に、phpファイルのパーミッションが正しく設定されていないために実行できず、このエラーが出ることもありますが、今回はパーミッションは正しく設定されていました。
というわけで、PHPプログラムの記述に問題があるのではないかと疑われます。そこで、さらにエラーの詳細な情報を表示させるために、エラーが発生しているPHPファイルの先頭に下記の記述を追記しました。
<?php
ini_set("display_errors", On);
error_reporting(E_ALL);
?>さて、エラーが発生しているPHPファイルにこの記述を入れてからFTPでサーバにアップし、プログラムを実行したところ、下図のようなメッセージが表示されました。
Fatal errorの箇所を見てみますと、mysql_connect()でエラーになっていることが分かります。そして、それは、エラーが発生しているPHPファイルの24行目のようです。
どうやら、PHPは動いているものの、MySQLへの接続がうまくいってないようです。しかし、MySQLにはデータをインポートし、phpMyAdmin で見る限りは正しく動いているようです。そこで、mixhostのサーバコントールパネルでPHPの設定状態を確認することにしました。サーバコントロールパネル(cPanel)の「ソフトウェア」、「Select PHP Version」を選択すると下図の画面が表示されました。
よく見てみますと、赤で囲った「mysql」にチェックが入っていません。mysql関数はPHP7.0以降では使えなくなりましたので、mysql ではなく mysqli にチェックが入っているは当然かもしれません。
「mysql」にチェックを入れて、再度PHPのプログラムを動かしたところ問題なく動くようになりました。
最後に、詳細なエラーメッセージを表示させるためにPHPファイルの先頭に記述した箇所は削除して元に戻しておいてくださいね。
本当の問題点
これでとりあえず、PHPのプログラムは動くようになったのですが、本当の問題点はやはりmysql関数をいまだに使用しているところにありそうです。早急にPHPの最新バージョンで動くようプログラムの改修を進めなければと考えています。では、今回はここまでです。




