n2p blog

キャンペーンやSNSの
“ためになる”情報を
執筆しています。

【初心者向け】PHPがブラウザで正しく表示されない時の対処【EC2インスタンス】

【初心者向け】PHPがブラウザで正しく表示されない時の対処【EC2インスタンス】サムネイル

早いもので入社してから1年が経ちます。でもまだまだ未熟ですLV的には5くらいです。

この記事シリーズ(?)のはじめに掲げてた目標は達成しています。二ヶ月ほど前に。
最後の方はもう駆け足だったし、ちょっとした問題も多々ありましたし、その辺も忘れないようにいずれ書けたらと思っています。
この記事は書き溜めしてたんですが、存在を忘れていたものです。今にして思えば、こんなことで詰まってたんだと思いますが、当時はとにかくわからないことだらけだし、自分で調べ
るしかないし、調べ方のコツみたいなのもよくわからなかったから大変でした。同じように困ってる人に見てもらえたらと思います。

『今回やること』

前回は権限の話、MySQLとPHP関連のライブラリのインストール、ライブラリとモジュールやその他の違いについて書きました。
今回は、Webページの方に戻って、サイトデータをサーバーにアップした際にPHPのページがブラウザにうまく表示されなかった時に行った対処について書いていきたいと思います。
画面にソースコードが表示される例についてですが、画面が真っ白になってしまう場合も同じ対処が有効な場合がありますよ。

『PHPが表示されない!とにかく確認だ!』

サイトデータを勉強用のEC2インスタンスサーバーにアップして、ブラウザ上で確認していると、PHPを使ったファイルのアップロード画面がうまく表示されていませんでした。

具体的には、ページのPHP部分のソースコードがそのまま表示されちゃってる。。。
(加工してます見にくかったらごめんね!)

phpsource1
うわぁ…( ゚ ρ ゚ )

こんな時は取り敢えず、PHPが動いているか確認!
[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][php] # cd /var/www/html
[/php] に移動してから、
vimコマンドでphpinfo.phpというをファイルを作りましょう。
vimや簡単なUnixコマンドの使い方は『EC2へ接続、Webサーバーインストール』で紹介しましたのでそちら、または同ページ内でご紹介させて頂いてるサイトさんなどでわかると思います。

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][php] #vim var/www/html/phpinfo.php
—–phpinfo.php—————————-
<?php phpinfo(); ?>
———————————————
[/php] CUI(黒画面の事)上で
[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][php] # php phpinfo.php
[/php] としてもphpinfoは確認できますが、ここはブラウザで確認してみましょう。
ブラウザのURLフォームに
Public DNS(ec2-Public IP.ap-northeast-?.compute.amazonaws.comというやつ)/phpinfo.php
と入力してください。
phpinfo2

こんな表示が出たらPHPは起動しています。このページで現在のサーバー内のPHPの設定状況などが確認できます。

まぁ、素人なので動いてる以上の情報はこの時はわかってないのが残念です。
新しいライブラリを入れる際に必要なモジュールが入ってるか確認したりする時に使ったりします。
今はとにかく「PHPに問題が!→取り敢えずphpinfoで確認だ!」の流れを初心者は特に癖にしとくべし。

『ショートタグ』

さて、色々調べてみると「ブラウザがPHPを認識してくれてない」という可能性が浮上。
つまり、PHPをPHPとして認識してないからソースをテキストとして表示してしまっているらしい。
なるほど、これっぽい!

どうやら、short_open_tagの設定で同じ問題がよく起こるらしい。
ショートタグと言うのは、HTML中にPHPを埋め込む際にコードを見やすくするために開始タグ<?php を <? と省略して書くことが出来るようにするもの。

例えば
[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][php] <? if($order[‘colors_arr’]){ ?>     //<?が <?phpの略
<input type=”hidden” id=”temporiginal” name=”temporiginal” value=”<?=$order[‘original’]?>”>  //<?=が <?php echo の略
[/php] といったように一行にPHPを組み込んだりする時に確かに見やすいし便利です。

省略できるのだから、良さそうに見えるが弊害もあるんですね。
.phpや.htmlファイルが<?xml で始まる文章の場合<?xml をPHPと認識してしまいエラーとなってしまう。
XMLについてはこちらを参照してください。

こうした弊害があるため、php.iniでは初期設定がOffになっておりショートタグを使っている構文が読み込めないようになっているみたいです。
公式でも使用は推奨されていません。
一般的には、将来のメンテナンス性を考え、なるべく<?php の形で 記入するのがいいみたいです。

今回僕がいじっていたPHPのページはショートタグが使われていました。
正解の予感!

『PHPの設定ファイルを書き換える』

PHPの設定について記述されているファイル、php.iniで設定を変更しましょう。

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][html] #vim /etc/php.ini
[/html] とすると
php
こんな感じの画面になります。

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][html] /short_open_tag =
[/html] と入力してshort_open_tagという項目を探しましょう。

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][php]</pre>
short_open_tag = On      //初期値がOffになっていると思いますので、Onにしてあげましょう。
さらに、初心者で練習中の時はこの辺も変更しときましょう。でも以下は本番時は戻してね。エラー内容が第三者に見られてしまう状況はよろしくありません。
error_reporting = E_ALL       //エラーを全て報告する。
display_errors = On                     //エラーをブラウザ画面で表示してくれる。安全面から初期値はOffだが、開発段階や練習時はOnにしておくとわかりやすい。
[/php]

iでInsertモードにし書き換えてください。
設定の記入が出来たら、『Escキー』でInsertモードを終了して『:wq』でファイルの上書きをしましょう。設定を変更したら更新のためのWebサーバーの再起動も忘れないように。
再起動を忘れて、あれ変わってないなぁ。 みたいなことがよくあるので皆さん気をつけましょう。

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][html] # service httpd restart
[/html] 確認してみると
display_php

きちんと表示されてます。
弊社運営Tシャツプリント事業『T1200』のテストページでした。
オリジナルプリントTシャツなどご入用の方は是非ご用命ください!

『補足・PHP5.4』

ショートタグの設定が可能なのはPHP5.3までの話です。
5.4以降はshort_open_tagは廃止されショートタグは常にOnになっていて、しかもXMLファイルもエラーは起こさないようです。
参照元
http://www.coalice.info/blog/programming/php/920.html

『まとめ』

手順を整理

  1. phpinfoの確認(short_open_tagがOffになっているか)
  2. コードを確認しショートタグが使われているか確認。
  3. 使われている場合で修正が難しい場合(<? となっているショートタグを<?php としてやるだけなんだけど)はphp.iniでshort_open_tagをOnに
  4. サーバーを再起動すれば出来上がり!
  5. それでも直らない時や、phpinfoも出ない時なんかは別の可能性を考える(次項に幾つか可能性を書いてます)

『直らない場合』

長くなってしまうので詳しくは触れられませんがその他の可能性についても少しまとめてみたいと思います。

文字コードと拡張子

表示のおかしくなるファイルの文字コードがきちんと指定されているか確認しましょう。日本語ベースならUTF-8が一般的。
その時、BOMなし(UTF-8N)指定で保存出来ているかも確認してください。
また、拡張子も.php指定できているか見てください。「.php.txt」とかなってませんか?基本的だけど確認大事。

HTTP側でPHPを読み込めていない

こんな可能性もあるようです。
/etc/httpd/conf/httpd.conf ファイルの
AddTypeという項目を探し
[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][html][/html] AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][html][/html] と追記してください。追記したら再起動も忘れずに!

メモリが足りてない

PHPでの処理が設定されたメモリ上限を超えた場合エラーになることもあります。この場合も画面は真っ白。
php.iniの
memory_limit の上限を上げてあげましょう。初期値はサーバーによって異なりますが、一般的には
32MB 64MB 128MB  あたりが設定されてると思います。
ただし、memory_limitの上限を必要以上に上げると、サイトの表示が遅くなったりする可能性もあるので、この場合は段階的に上げるといいと思います。
くどいけど再起動はお忘れなく。

この辺りがよくある原因と対処法です。実はエラー修正の基本の基本もよくわかってなかったからこの修正作業にも結構苦しめられた初心者でした。

参考にさせていただいたサイトさんやら参考書

phpで画面が真っ白になってしまったときの対処法
PHPのソースが表示されてしまう
Webサイト制作者のためにPHP入門講座
PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)

前回『【初心者向け!】Ec2上でユーザー管理とMySQLサーバー、PHPのインストール【おまけ付き】
次回『【初心者向け】RDSを立ち上げてEC2につなげてあげよう!【AWS】』[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]