どうも、こんにちは!ピコっそです。最近PHPの学習において悩んでいることがあります。
それは

このような真っ白な画面が最近頻繁に出てくると言うことです。
そしてターミナルで確認すると、「Internal Server Error(500)」とエラーが出てきます。
一見シンプルですが、初心者にとっては非常にやっかいなエラーですよね。
今回の記事では、この“真っ白画面”の原因と、誰でも簡単にできる解決方法をわかりやすく紹介していこうと思います。
画面が「真っ白」になる理由
PHPの学習において、「画面が真っ白」になる理由について解説します。
特に今回は初学者がよく躓くポイントを含めて3点お伝えPHPの学習を進めていると、
突然「画面が真っ白になる」という現象に出くわすことがあります。
このとき、「コードが動いていないのかな?」と思うかもしれませんが、
実はエラーが起きているのに表示されていないだけというケースがほとんどです。
今回は、そんな初学者がよく躓く「真っ白画面」になる原因を3つ紹介し、
あわせて基本的な対処法も解説していきます。と思います。
1:構文エラー(文法ミス)
画面が真っ白になる理由の一つとして「構文エラー(文法エラー)」が挙げられます。
このミスは特にPHP初学者に一番多い典型例だと私は考えます。
特に一番多いのが、
<?php
echo "Hello World" // ← セミコロン抜け!
?>
このようにセミコロン(;)が抜けるだけで、エラーが発生します。
しかし、エラー表示がOFFになっていると、何も表示されず“真っ白画面”になることがあり、
「エラーが表示されない!」
と焦ってしまうこともあるでしょう(実際、私がそうでした)
このような構文エラーはセミコロン以外にも、
カッコの閉じ忘れ、全角スペース混入など、さまざまな原因で発生します。まざまな理由で構文エラーが発生した際に、画面が真っ白になる場合があります。
これらのエラーが出たとき、まず最初にやるべきことは、
エラーを表示させる設定をONにすることです。
具体的な方法は、次章「画面真っ白を解消する方法」で紹介します。際に「エラー例を見て解決してみよう」の章で一緒に見ていきましょう。
2:ファイルの保存形式 or エンコーディングミス
ファイルの保存形式を間違えることも、画面を「真っ白」にさせる大きな原因の一つであると私は考えます。
特にPHPファイルを UTF-8 (BOMなし) 以外で保存すると、ファイルの先頭に“見えないゴミ文字(BOM)”が混ざってエラーになります。
症状として、
・画面が真っ白になる
・ヘッダー送信エラー(headers already sent)が出る
上記の2点が発生します。
3:致命的エラー(Fatal Error)
「存在しない関数・変数・ファイルを呼び出した」などで、PHPが処理を強制終了すると真っ白になります。
よくある典型例として、
<?php
include("missing_file.php"); // 存在しないファイル
echo $undefinedVar; // 定義していない変数
?>
このような実行時エラーも、構文エラーと同じくエラー非表示設定だと真っ白になります。
画面真っ白を解消する方法
つづいて、このようなエラーが発生した際にどのように解消するかを解説します。
まず以下のコードを使う
error_reporting(E_ALL);
ini_set('display_errors', '1');
このコードを使うことによって、画面真っ白の状態から脱出することができ、
どの行でエラーが発生したか
を明確にさせることができます。
またこのコードの意味を解説すると、
error_reporting(E_ALL);
は、今起こっているすべてのエラーを検出するコードで、
ini_set('display_errors', '1');
は、検出したエラーを画面(ブラウザ)に表示する設定となっております。
このコードを使うことによって、何のエラーが発生したかがわかり、解決の一歩を踏み出すことができます。
実用例を見てみよう
以下のコードは実際に私がコーディング中にミスをし、画面が真っ白となったコードとなります。
<?php
$students = [
["name" => "太郎", "scores" => [50, 70, 60]],
["name" => "花子", "scores" => [90, 100, 80]],
["name" => "次郎", "scores" => [70, 80, 90]]
];
$ave_list = [];
foreach($students as $student){
$total = 0;
$ave = 0;
for($i=0; $i<count($student["scores"]); $i++){
$total += $student["scores"][$i];
$ave = $total / count($student["scores"]);
}
for($a=0; $a<count($ave); $a++){
for($b=0; $b<count($ave)-$a-1; $b++){
if($ave[$b] > $ave[$b+1]){
$temp_ave = $ave[$b];
$ave[$b] = $ave[$b+1];
$ave[$b+1] = $temp_ave;
}
echo $ave.'<br>';
}
}
}
?>
このコードでは、$studentsの配列内にある、”scores”内の平均点を算出した上で、それらの点数をもとに降順にならべるようにしようとしたものになります。
コーディングしている途中でecho $ave.'<br>’;で降順に並べた平均点を出力しようとしたところ、画面が真っ白になりました。
実際に、
error_reporting(E_ALL);
ini_set('display_errors', '1');
をPHPファイルの先頭に記述すると、

このようなエラーコードが出てきました。このエラーコードをみると、
for($a=0; $a<count($ave); $a++){
ここの行でエラーが発生していることがわかります。
そしてこのエラーの内容は
count() 関数に“数値(int)”を渡したため、PHPが処理できずに致命的エラーを出した
というものになります。
つまりcount()関数に対して、
$count = count(5); // ❌ NG → int型は数えられない
このような記述をしたことによって、発生したエラーであると考えられます。
またcount関数は「配列やオブジェクトの要素数を数える関数」であるため、正しい書き方は
count([1, 2, 3]); // OK → 結果: 3
となります。
そして実際に修正したコードがこちらになります。
<?php
usort($students, function($a, $b) {
$avgA = array_sum($a['scores']) / count($a['scores']);
$avgB = array_sum($b['scores']) / count($b['scores']);
return $avgB <=> $avgA; // 降順
});
foreach ($students as $s) {
$avg = array_sum($s['scores']) / count($s['scores']);
echo $s['name'] . ':平均 ' . (int)$avg . '点<br>';
}
?>
修正したコードでは、平均点を求めて並べ替えをすることを目的としており、usort()と宇宙船演算子(<=>)を使って並び替えを行いました。
今回の例は「画面が真っ白になる原因」の章でいう1番の「構文エラー(文法エラー)」に該当します。つまり、このエラーは「count() に配列ではなく数値を渡した」ことが原因で画面が真っ白になったということがわかります。
まとめ
今回はPHP初心者が陥りがちな「画面真っ白」状態からの解決方法についての解説を行いました。
画面真っ白になる原因は主に三つあり、
・構文エラー(文法エラー)によるもの
・ファイルの保存形式によるもの
・致命的エラー(存在しない変数やファイルを呼び出す行為)
となります。
これらの問題は、次の2行をPHPファイルの先頭に書くだけで解決の糸口が見つかります。
error_reporting(E_ALL);
ini_set('display_errors', '1');
このコードを使うことで、エラー内容が画面に表示され、「画面真っ白状態」から脱出することができます。そして、表示されたエラー箇所を修正すれば、プログラムは正常に動作するようになります。、エラーが完全に解消することができます!
このことから、画面真っ白状態に遭遇した際は上記のコードを使えばいいということになります。
最後に
今回の記事で、「画面真っ白状態」になっても自信持って解決できるようになった!と思える方が一人でもいれば嬉しく思います。
また今回「画面真っ白を解消する方法」の「実用例を見てみよう」にて出てきた「宇宙船演算子(<=>)」の解説記事も興味がある方はぜひチェックしてみてください。
では最後までご覧いただき、ありがとうございました。
今後も初心者でも理解しやすいJavaScript・PHPの基礎シリーズを投稿していきます!
どうぞよろしくお願いいたします。



コメント