【初心者向け】盲点?PHPが動かない時
びっくりした意外な原因

2018-08-15

ある時、PHPでソースを書いていると、試作ファイルでは動くプログラムが、本番ファイルに組み込むとうまく動かないという問題にぶちあたりました。

私はいつも試作ファイルでシンプルに作成して、動作テストで問題なければ、本番ファイルに組み込んで完成、という手順を踏んでいたのですが、試作ファイルでは動作するのに、本番ファイルにコピペすると動きません。

ここではその時に試した「PHPが動かない時にチェックするポイント」をまとめつつ、この時の意外な原因と、その解決方法をメモっておきたいと思います。

\項目をタップするとジャンプできます/

PHPが動かない時に確認したい基本の項目

テストファイルでは動いていたのに……? とは思いつつ、私が引っかかりやすい「PHPが動かない時に確認したい」項目を、1つずつチェックしてみました。

「<?php ?>」は正確か?

PHPは「<?php ~ ?>」内に記述する言語なので、「<?php 」や「 ?>」を忘れていたり間違っていたりすると、PHPは動きません。

長文になると、たまに「 ?>」を忘れたりするので、ファイルの最終行までしっかりチェックします。

また、「<?php」の直後に半角スペースを入れず、コメントを書いてしまったりすると、やはりPHPは動きません。

×「<?php// ?>」
◎「<?php // ?>」

たまにやってしまうので、半角スペースやコメントアウトもチェックしたのですが、こちらも原因ではありませんでした。

パスミス、スペルミスはないか?

表示ファイルとプログラムファイルを分けている場合は、プログラムファイルを「include」などで呼び出す時に、ファイル名やディレクトリ名(パス)が1文字でも不正確だと、呼び出す事ができません。

長いファイル名はコピペが安心です。

また、PHPを始めたばかりで相対パスを使う場合、階層が複雑だと、どこのファイルを基準にパスを書くか、混乱しやすいです。

最初は同階層など分かりやすい階層において、パスをシンプルにしてみましょう。

また、if文などの開閉タグがかみ合っていない、閉じ忘れている時なども、PHPは動きません。

ただ、こういったスペルミスはテスト環境のブラウザで確認できるので、試作ファイルで問題ない場合は、スペルミスが原因である可能性は低いです。

そもそも.phpファイルか?

これはファイル形式(ファイルの拡張子)の問題です。

「htmlファイル」にPHPを書いても通常は動作しないので、編集しているファイルの拡張子が「.php」である事を確認します。

眠気がMAXになると「htmlファイル」にPHPを書き始める事があるので、念のため確認。

「htmlファイル」でも「.htaccess」ファイルの設定次第でPHPを動かす事ができるので、ローカル環境で「htmlファイル」にPHPを書くのに慣れていると、そういった設定のない本番環境で気づかない事もあったります。

どれでもなかった

私は当初、ディレクトリを含めたパス指定にとても苦手意識があったので、厳重に確認したのですが、今回の原因は上記のどれでもありませんでした。

試作ファイルを本番ファイルと置き換えてみると問題なく動くのに、試作ファイルの内容をいざ本番ファイルにコピペすると、動かなくなります。

あれれ??

何かの拍子でファイルが壊れてしまったのかも? と思ったものの、思い当たることはありません。

では、何かの拍子にファイル形式が変わってしまった……?

と考えていると、限りなくコレに近い原因でした。

原因はファイルの「改行コード」だった

試作ファイルと本番ファイル、どちらもファイル形式は「UTF-8(BOMなし)」と同じでしたが、そのあとの「改行コード」が違っていました。

動く方は「CR+LF(Windows)」、動かない方は「UNIX」になっていました。

私はWindows環境なので「多分これだー!」と、テキストエディタから改行コードを「CR+LF(Windows)」に変更!

すると、無事動くようになりました。

もしかしたらファイルを保存する時、何かの拍子に変更してしまったのかも知れません。

私はよくスペルミスなどでPHPが動かない~と慌てることが多いのですが……

PHPが動かない時は、基本的な部分以外にも、「ファイル形式」や「改行コード」も一度確認してみるといいかも知れません。