PHPでWebサイトや業務システムを運用していると、ログファイルに「PHP Notice」「PHP Warning」といったメッセージが記録されることがあります。これらは必ずしも即座にサイト停止を意味するものではありませんが、プログラムの想定外の状態や設定ミスを知らせる重要なサインです。
この記事では、「Undefined index: PATH_INFO」「Undefined variable」「pg_connect(): Unable to connect to PostgreSQL server」などのエラーが何を意味しているのか、原因や確認すべきポイントを初心者にも分かりやすく解説します。
PHP NoticeとPHP Warningの違いとは
PHPのログに表示されるNoticeやWarningは、プログラム実行時に問題を検出したことを示すメッセージです。
PHP Noticeは、処理自体は続行できるものの、プログラム上で注意すべき状態がある場合に表示されます。例えば、存在しない配列の項目を読み込んだ場合や、まだ値が設定されていない変数を使用した場合などです。
PHP Warningは、Noticeより重大度が高く、処理に影響する可能性がある問題を示します。今回のログでは、PostgreSQLデータベースへの接続失敗がWarningとして記録されています。
Undefined index: PATH_INFOの意味と原因
「PHP Notice: Undefined index: PATH_INFO」というメッセージは、PHPプログラムが「PATH_INFO」という値を取得しようとしたものの、そのデータが存在しなかったことを意味します。
例えば、以下のようなコードがある場合に発生します。
$path = $_SERVER['PATH_INFO'];
通常はWebサーバーからPATH_INFOという情報が渡される想定ですが、URLの形式やサーバー設定によっては値が存在しない場合があります。
対策としては、値が存在するか確認してから利用する方法が一般的です。
if(isset($_SERVER['PATH_INFO'])){ $path = $_SERVER['PATH_INFO']; }
つまり、このエラーは「PATH_INFOが必ず存在するとプログラムが思い込んでいるが、実際には存在しない場合がある」という意味になります。
Undefined variable: admin_dir・admin_tableの意味
「Undefined variable: admin_dir」「Undefined variable: admin_table」は、定義されていない変数を使おうとしている場合に発生します。
例えば、以下のような処理ではエラーになります。
echo $admin_dir;
この時点で$admin_dirという変数に値が代入されていないため、PHPは「その変数は存在しません」と通知しています。
原因としては、以下のようなものが考えられます。
- 変数を設定する処理が実行されていない
- 条件分岐によって代入処理を通らない場合がある
- 設定ファイルの読み込みに失敗している
- 古いPHPバージョンでは動作していたが、新しい環境で警告が出るようになった
修正する場合は、変数を利用する前に初期値を設定する、または必要な設定ファイルが正常に読み込まれているか確認します。
pg_connect(): Unable to connect to PostgreSQL serverの意味
今回のログで最も確認が必要なのは、「pg_connect(): Unable to connect to PostgreSQL server」というWarningです。
これはPHPからPostgreSQLデータベースへ接続しようとしたものの、接続できなかったことを意味します。
ログには以下の内容があります。
could not connect to server: Connection refused
Is the server running on host "133.125.66.230" and accepting TCP/IP connections on port 5432?
これは、「133.125.66.230というサーバーの5432番ポートに接続しようとしたが、接続を拒否された」という意味です。
PostgreSQL接続エラーで確認するポイント
PostgreSQLへの接続失敗は、主に以下の原因で発生します。
| 原因 | 確認内容 |
|---|---|
| PostgreSQLが停止している | データベースサービスが起動しているか確認する |
| 接続先サーバーが間違っている | ホスト名やIPアドレス設定を確認する |
| ポートが閉じている | 5432番ポートが通信可能か確認する |
| PostgreSQL側が外部接続を許可していない | postgresql.confやpg_hba.confを確認する |
| ファイアウォールで遮断されている | サーバー間通信設定を確認する |
例えば、サーバー移転後やデータベースサーバーの再起動後に、接続先設定が古いままになっているケースがあります。
また、レンタルサーバーを利用している場合は、PostgreSQLの利用設定や接続許可設定が変更されていないか、管理画面から確認する必要があります。
今回のログから考えられる状況
今回表示されている複数のエラーを見ると、PHPプログラム自体にも古い書き方による注意事項がありますが、実際の動作障害につながる可能性が高いのはPostgreSQL接続エラーです。
流れとしては、PHPプログラムが動作する際に、設定値やURL情報を取得しようとしてNoticeが発生し、その後データベースへ接続しようとして失敗してWarningが発生している可能性があります。
例えば、商品管理システムや会員管理システムの場合、データベースに接続できないと、商品一覧が表示できない、ログインできないなどの問題につながることがあります。
古いPHPシステムで発生しやすい理由
今回のようなエラーは、長期間運用されているPHPシステムで比較的よく見られます。
以前のPHPでは問題なく動作していたコードでも、PHPのバージョンアップによってNoticeやWarningが表示されることがあります。
特に、変数の未定義利用や配列キーの存在確認不足は、古いPHPプログラムで多く見られる問題です。
そのため、エラーを完全に解消するには、単純に設定を変更するだけではなく、該当するPHPファイル(今回の場合はhelper.phpやpostgres.php)のコード確認も必要になります。
まとめ
今回のPHPログでは、大きく分けて3種類の問題が記録されています。
- PATH_INFOが存在しない状態で参照しているNotice
- admin_dirやadmin_tableという変数が未定義のNotice
- PostgreSQLサーバーへ接続できないWarning
Notice系はすぐに停止につながらない場合もありますが、プログラムの改善ポイントを示しています。一方で、PostgreSQL接続エラーはシステムの主要機能に影響する可能性があるため、データベースサーバーの稼働状況や接続設定を優先して確認することが重要です。
まずはログに記録されているファイル名と行番号(helper.phpの53行・154行、postgres.phpの36行)を確認し、該当箇所のコードとサーバー設定を調査すると原因特定につながります。


コメント