[PHP]エラー表示設定をphp.iniで。vagrant centOS 出版社 と戦った話

こんにちは。たきもとです。

先日購入した本を進めていると、PHPのエラーが画面に表示されなくて困っていました。
先走って出版社に問合せてしまったのですが、回答を貰う前に解決したのでここで情報をシェアします。
 
 
ちなみに、先日購入した本は
『土日で分かるPHPプログラミング教室』
です。
これについての記事はこちら。
土日で分かるPHPプログラミング教室の実践 | たきもとけんご.com
 
 
今回得た教訓は、
「本に載っているソフトはバージョンも揃えてインストールしよう」
「phpinfo()をみよう」
「友人は大切にしよう」
です。

背景

バージョンが異なるソフトをインストール

先述したように,
『土日で分かるPHPプログラミング教室』
を実践していました。

私は指定されたソフトの最新版をインストールしました。
つまり、本書指定ソフトのバージョン違いです。
これが今回の問題の原因なのですが・・。
 
 
きっと慣れている方はこんなミスしないのでしょう。
初心者的発想では
-新しいバージョンの方がバグも修正されていて旧バージョンより良い感じ
だったんです。
 
 
結局、今回の問題に丸一日費やしたので今後は書籍の誤植以外は厳密に従います。
 
 

500エラー の出現

500エラー
本書を進めていると,何故が画面にエラーが表示されず、いわゆる
500エラー
が出てきます。
500エラーとはすぐ上の画像のような表示のことです。
 
 
500エラーの原因はパシ氏のサイトによると次の通りです。

  • .htaccess の記述、書式、コードに誤りがある。
  • CGIプログラムの設定に誤りがある(CGI内部エラー)
  • CGIファイルやディレクトリのパーミッションに誤りがある。
  • サーバに負荷がかかりすぎている。
  • WordPressのバグ
  • パソコンの問題
  • メモリ容量オーバー

 
 
引用: 500エラーの原因と対処法 | レンサバネット

今回は全て検討しましたが、どれもはずれでした。
 
 

fufelPHPの画面は出る

http://localhost:8000

とすると見事にwelcomeページが開きます。

また、正常なphp記述をするとブラウザに正しく結果が出ます。
たとえばこんな感じで。

<?php

//実行
print "画面表示 OK";

 
 

環境

次のどちらの環境でも再現します。
 
 
Windows 7 / Windows 8.1
32bit / 64bit
core 2 duo, 2 GHz / core i5 2.2GHz
RAM= 2GB / RAM= 8GB
 
 
-centOS
-vagrant
-PuTTY
 
 

デバッグ時は phpinfo() を見るといいことあるよ

phpinfo

今まで文法の記述ミスを発見するために
var_dump
を多用してきました。

文法以外のデバッグは phpinfo() が便利です。

<?php

phpinfo();

このコマンドを発行すると上の画像のような画面になります。
 
 

注目するのは display_errors

display_errors 1

phpinfo()内のdisplay_errorsを検索してみるとこんな表示に。
これを On にすれば解決しそうです。
 
 

エラー表示方法

大きく2種類あります。

– .phpファイルの編集
– php.ini の編集

片方だけで解決すればokですが、私はphp.iniの編集をする事で解決しました。
 
 

ini_set(‘display_errors’, 1)

まずは.phpの編集です。

.phpファイル冒頭に次の表記をしましょう。

ini_set('display_errors', 1);// 0: エラー出力しない, 1:エラー出力する

これを記述して先程と同じようにphpinfo()を実行すると次のようになります。
 
 
display_errors 2

Local Value だけがOnになりました。

この状態で所望のphpファイルして500エラーが解決されればokです。
私は解決しなかったので、
きっとMaster Valueも変更する必要があるんだな
という考えで次の手段に移りました。
 
 
*ちなみに、出版社からの回答はこの方法でした。
残念ですが、LocalだけじゃなくMaster の値まで変える必要があるっぽいです。
なので、私はphpinfo()を見ながら次の手段をとりました。
 
 

php.ini の編集

phpinfo()によるとphp.iniの在り処は
/etc
だそうです。

php.ini

windowsからetcというディレクトリには辿りつけないので,

-PuTTYを利用して
-centOSにログイン
-ls でカーレントディレクトリ移動
-vi でファイル編集
-編集後,vagrant reload でapache再起動

という手順でクリアしました。
この時、パーミッションの関係で
chmod
sudo
コマンドを発行したので、同様にハマった方はお試し下さい。
 
 
*Master Valueを変えると本番環境でもエラーが出力されるはずです。
本番環境に移す前に再度変更しましょう。
 
 

まとめ

困ったときに相談できる人がいると楽

今回は元SEの友人に相談して解決しました。
改めてこの場で御礼を言います。

ほんと、助かりました。
ありがとうね。
 
 
独学でハマった場合、解決策がググるしかないんですよね。
これだといつかは解決するかもしれないけど時間が掛かってしょうがない。

誰か詳しい人が知り合いにいるというのは心強いです。
勉強会でも何でも参加してプログラミング仲間を作ったほうが良いかもしれませんね、私。
 
 

あえて今回の問題で良かったことを挙げるとしたらコレ

問題にぶつかって人は成長するんだ、と思いながら書きます。

あえて良かった点を挙げるとしたら、今回は本書の中身をすっ飛ばして

-PuTTYでCentOSにログイン
-centOS上ファイルをlinuxコマンドで編集

した点です。
このことで
-本書を終えるための時間が短縮されそう
-次回似たようなトラブルがあったら解決できそう
という自信が持てました。
 
 
本書にはない操作、具体的には

-非表示のディレクトリにlsしてviしたらパーミッションがダメ、と怒られ。
-そしてchmodした後にsudoしてようやくviができて。
-最後にセキュリティが心配だからまたchmodして。

これは今後自分で本番環境作った時に活かせそうです。
 
 
あえて良かった点 を上げている時点でやや負け惜しみ感が滲み出ていますが・・
いい勉強になりました。

今回は以上です。

この記事を書いた人

1985年生まれ 東京都在住 フリーランスWEBエンジニア.
30歳からWEBプログラミングを独学で習得. その後エンジニアとして某企業にコミット.
現在は週3日稼働のフリーランスエンジニアとして活躍.
学んだことを中心に web 界隈の人達に向けた情報を発信.

たきもとをフォローする
CODE
たきもと.com

コメント

Secured By miniOrange