phpinfoを実行したらページが真っ白になって何も表示されない時の対処法

先輩への質問の返答が、全部「ググレカス」

phpinfo()を書いたファイルをブラウザで開いたのに、表示されるのは真っ白なページだけ──そんな状態を解決するためのチェック手順をまとめます。

PHPの設定を確認しようとしてphpinfo()を実行したら、あの見慣れた紫色の設定一覧が出るどころか、何も書かれていない白い画面が返ってくる。私も初めてこれに出くわしたときは「サーバーが壊れたのか」と軽くテンパりました。

結論から言うと、白画面の原因はほとんどがちょっとした書き方のミスか、エラーが画面に出ない設定になっていることです。原因を一つずつ切り分ければ、たいていは数分で解決します。この記事では、私が実際に詰まったポイントも交えながら、現行のPHP 8系を前提に対処法を整理しました。

ちなみにWordPress全体が真っ白になる「死の白い画面」については、原因がもう少し広範囲になります。そちらは別記事にまとめているので、サイト全体が落ちている場合は併せてどうぞ。

関連記事:WordPressの画面が真っ白になる原因と対処法を解説

phpinfo()とは何か

まず前提の確認です。phpinfo()は、いま動いているPHPにどんな設定が入っているのかを一覧で出力する関数です。バージョン、読み込まれている拡張モジュール、php.iniの各ディレクティブの値、サーバー環境変数まで、ずらりと表で見られます。

「メモリ上限はいくつか」「この拡張は入っているか」「タイムゾーンの設定は」といった確認を一発で済ませられるので、サーバーを触り始めたときの定番ツールです。使い方はシンプルで、次の1行を書いたファイルを用意するだけです。

<?php
phpinfo();

このファイルをinfo.phpなどの名前で公開ディレクトリに置き、ブラウザでアクセスすれば設定一覧が表示される、というのが本来の動きです。それが真っ白になるわけですから、どこかで実行がつまずいているわけです。

出典:PHP: phpinfo – Manual

真っ白になる主な原因と切り分け

白画面になる原因はいくつかのパターンに分かれます。上から順に確認していくと、自分のケースがどれに当たるか見えてきます。

1. 短縮タグ「<?」で書いている

私が最初に詰まったのがこれでした。次のように短縮タグ(ショートタグ)で書いていたのが原因です。

<?
phpinfo();
?>

この<?という開きタグは、php.inishort_open_tagが有効なときしか使えません。PHP公式マニュアル上のデフォルトは有効ですが、多くのレンタルサーバーやLinuxディストリビューションでは無効に設定されていることが珍しくありません。無効だと<?がPHPの開始タグとして認識されず、中身がただのテキスト扱いになって何も出力されない、つまり白画面になります。

対処はシンプルで、正式な開始タグ<?phpで書き直すだけです。

<?php
phpinfo();

「phpinfoの書き方」で検索すると<?で紹介しているページも見かけますが、サーバー設定に依存しない<?phpで書くのが安全です。ファイル末尾の閉じタグ?>は、PHPだけのファイルなら省略するのが現在の推奨スタイルです(余計な空白や改行が出力に混ざるのを防げます)。

出典:PHP: 言語およびその他の各種オプション – Manual(short_open_tag)

2. 拡張子が「.php」になっていない

ファイル名がinfo.txtinfo.php.txtになっていると、サーバーはPHPとして処理しません。さらに、拡張子は合っていてもサーバー側でPHP自体が有効になっていない(静的ファイル配信用のディレクトリに置いた、PHPがインストールされていない等)場合は、ソースコードがそのまま見えるか、白い画面になります。まず.phpであること、そのディレクトリでPHPが動く設定であることを確認します。

3. PHPの構文ミス(パースエラー)

セミコロンや括弧の閉じ忘れといった構文ミスがあると、PHPはスクリプトを実行する前のパース(解析)段階で止まります。このとき後述のdisplay_errorsが無効だと、エラーメッセージも出ないまま真っ白になります。phpinfo()の1行だけなら起こりにくいですが、ほかのコードと一緒に書いているときは要注意です。

4. エラーが画面に出ない設定になっている

本番向けのPHP設定ではdisplay_errorsOffになっているのが普通です。これはエラー内容を画面に表示しない設定で、セキュリティ上は正しいのですが、開発中は原因が見えず「ただ真っ白」という状態になりがちです。次の章で、エラーを一時的に表示させる方法を説明します。

エラーを表示させて原因を特定する

白画面の正体を知るには、隠れているエラーを表に出すのが近道です。確認したいファイルの先頭に次の2行を加えます。

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

phpinfo();

error_reporting(E_ALL)ですべての種類のエラーを報告対象にし、ini_set('display_errors', '1')でそれを画面に表示します。これで構文ミスや権限エラーがあれば、白画面の代わりにエラー文が出るはずです。

ただし、ここに重要な落とし穴があります。PHP公式マニュアルが明記しているとおり、ini_set()によるdisplay_errorsの変更は、そのファイル自身の構文ミス(パースエラーや致命的エラー)には効きません。スクリプトは実行前にファイル全体が一度パースされるため、パース段階で止まる種類のエラーは、表示設定を切り替えるコードが動く前に発生してしまうからです。

つまり、上記を書いても真っ白なままなら、そのファイル自体に構文ミスがある可能性が高い、と判断できます。この場合は次のエラーログを当たります。

エラーログを確認する

画面に出ないエラーも、サーバー側のエラーログには記録されていることがほとんどです。php.inilog_errorsが有効なら、error_logで指定されたファイルにエラー内容が書き出されています。

log_errors = On
error_log = /path/to/error.log

レンタルサーバーなら管理画面の「エラーログ」メニュー、自前のサーバーならApacheやnginxのエラーログ、あるいは上記で指定したファイルを確認します。「○行目で予期しない文字」といった具体的な行番号が出るので、構文ミスの特定が一気に楽になります。本番環境ではdisplay_errorsはOffのままにして、このログで追うのが正しい運用です。

出典:PHP: 実行時設定 – Manual(display_errors / error_reporting / log_errors)

確認が終わったら必ずphpinfoファイルを削除する

無事に表示できたら、忘れてはいけないのが後始末です。phpinfo()の出力には、PHPのバージョン、サーバーのパス、読み込まれているモジュール、環境変数など、攻撃の手がかりになる情報がそのまま並んでいます。公開状態のまま放置すると、サーバーの中身を外部に見せているのと同じです。

確認が済んだら必ずファイルを削除するか、最低でもアクセスできない場所へ移してください。info.phpのような分かりやすい名前のまま置きっぱなしにしているサイトは、自動巡回ツールの格好の的になります。「確認用に置いたまま忘れていた」が一番危ないので、確認とセットで削除する習慣にしておくと安心です。

まとめ

phpinfoが真っ白になったときのチェック順を整理します。

  • まず開始タグを確認<?ではなく<?phpで書く。サーバー設定に依存しないこの書き方が基本
  • ファイルが.phpで、PHPが動く場所か確認:拡張子とサーバー側のPHP有効化をチェック
  • エラーを表示させる:ファイル先頭にerror_reporting(E_ALL)ini_set('display_errors', '1')を追加
  • それでも白いならエラーログを見る:パースエラーは画面の表示設定では拾えないため、ログで行番号を特定する
  • 確認後は必ず削除:phpinfoは機密情報の塊。放置は厳禁

白画面はメッセージが何も出ないぶん不安になりますが、原因のパターンは限られています。一番のおすすめは、開始タグを<?phpに直したうえでエラー表示をオンにすること。これだけで多くのケースは正体が見えます。なお、サーバーのパスを調べたいときはphpinfo()以外の方法もあるので、用途に応じて使い分けてみてください。

関連記事:PHPでサーバーの絶対パス(フルパス)を調べる方法と関数・定数の使い分け