PHPのrequire/includeの違い本番だけ読み込めない時確認順番
require と include の違いで一番大事なのは、読み込みに失敗した時に止まるかどうかです。DB設定、認証、共通関数のように欠けたまま動くと危ないものは、止まる方が正しいことがあります。
ただし、ロリポップ本番で Failed opening required や真っ白画面になる原因は、命令の選び方だけではありません。多くは、相対パス、アップロード先、ファイル名の大文字小文字、ローカルと本番の構成差が混ざっています。
確認日と対象
確認日: 2026年6月12日。ロリポップでWordPressではない自作PHPサイトをFTPまたはSFTPで更新し、include や require の読み込みで迷っている初心者向けです。
Composerのautoload、Laravelなどのフレームワーク固有の読み込み設計、複雑な名前空間設計は対象外です。まず、必須ファイルか任意パーツか、そして本番のパスが合っているかを分けます。
このページで整理できること
- 必須読み込みと任意読み込みの使い分けを決める
- 本番だけ
Failed opening requiredが出る時に、先に見る場所を決める - 相対パス、
__DIR__、DOCUMENT_ROOTのどれを使うか整理する - エラーを隠すために
requireをincludeへ変えてよいか判断する - AIやサーバー会社へ相談する時に、貼ってよい情報と伏せる情報を分ける
読み込み失敗時の考え方
命令を変える前に、「ないと危ないファイルか」「本番の置き場所が合っているか」を分けます。
先に結論
DB設定、認証、関数、class、フォーム処理のように、読み込めないまま続くと危ないものは require_once を基本にします。広告枠、補助バナー、なくても本文が読める任意パーツなら include を検討します。
本番だけ止まる時に、焦って require を include に変えるのはおすすめしません。エラーが見えにくくなるだけで、設定未読み込み、未定義関数、フォーム不具合が後ろで残ることがあります。
違いは失敗した時に止まるか
| 命令 | 読み込み失敗時 | 向いているもの | 初心者向けの判断 |
|---|---|---|---|
require | 止まる | DB設定、認証、必須の共通処理 | 欠けたら表示してはいけない時に使う |
include | 警告が出て続く場合がある | 任意の広告、補助パーツ、案内枠 | 欠けても本文や処理が成立する時に使う |
require_once | 1回だけ必須読み込み | 関数定義、class定義、設定ファイル | 初心者は必須ファイルでまずこれを選ぶ |
include_once | 1回だけ任意読み込み | 重複を避けたい補助パーツ | 任意だが重複読み込みを避けたい時に使う |
何を読み込むかで決める
命令名だけを覚えるより、「そのファイルがない状態でページを出してよいか」で決める方が実務では迷いにくいです。
| 読み込むもの | おすすめ | 理由 |
|---|---|---|
| DB接続設定、環境設定 | require_once | 読めないまま続くと、別DB、空設定、認証漏れにつながるため。 |
| 関数、class、共通ライブラリ | require_once | 二重読み込みの再定義エラーを避けながら、必須として扱うため。 |
| ログイン判定、管理画面の権限確認 | require_once | 読めない時に続く方が危険なため。 |
| ナビ、フッター、メタタグ | 運用方針で決める | サイト全体に必須なら require、本文優先なら include。 |
| 広告、キャンペーン枠、補助案内 | include | 欠けても主な本文や処理は成立するため。 |
本番で止まる典型例
| 症状 | 原因候補 | 確認すること |
|---|---|---|
Failed opening required | 読み込み先が見つからない | FTP上にファイルがあるか、パスが合うか |
| ローカルだけ動く | Windowsと本番で大文字小文字の扱いが違う | Meta.php と meta.php の違い |
| 階層が深い記事だけ止まる | 相対パスが崩れている | ../ の数、__DIR__ の利用 |
| 関数の再定義エラー | 同じファイルを複数回読んでいる | require_once にする |
| 本番だけDB接続で止まる | ローカル用設定を読んでいる | 設定分離、本番用ファイルの置き場所 |
パスは__DIR__で安定させる
相対パスだけで読み込むと、呼び出し元の階層によって壊れやすくなります。設定ファイルや関数ファイルは、今のファイル自身の場所を基準にする __DIR__ が扱いやすいです。
<?php
require_once __DIR__ . '/includes/db_config.php';
require_once __DIR__ . '/includes/functions.php';
1つ上の階層にある設定ファイルを読むなら、次のように親ディレクトリを基準にします。
<?php
require_once dirname(__DIR__) . '/config/app.php';
テンプレートからサイト共通のナビやフッターを読むような場合は、公開ルートを基準にする DOCUMENT_ROOT も使えます。ただし、cronやCLI実行では環境が違うことがあるため、PHP処理側の必須ファイルは __DIR__ を優先して考えます。
<?php include($_SERVER['DOCUMENT_ROOT'] . "/nav.php"); ?>
やってはいけない直し方
真っ白画面を早く消したくても、次の直し方は原因を残しやすいです。
| やりがちな対応 | なぜ危ないか | 代わりにすること |
|---|---|---|
require を全部 include に変える |
必須設定が読めないまま処理が続き、別のエラーに変わることがある。 | 止まるべきファイルか確認し、パスを直す。 |
| エラー表示だけ消す | 画面は静かになっても、ログ上のエラーや機能不具合は残る。 | エラーログで実際に探しているパスを見る。 |
| ユーザー入力からinclude先を作る | 意図しないファイルを読ませる危険がある。 | 読み込み先は固定のパスか、許可リストから選ぶ。 |
../ を増やし続ける |
下層ページだけ直って別ページが壊れることがある。 | __DIR__ や DOCUMENT_ROOT で基準を明確にする。 |
本番で確認する順番
- エラー文のファイル名と行番号を見る
- 読み込み先のファイルがFTP上にあるか確認する
- 大文字小文字が一致しているか確認する
../の数が階層に合っているか見る- 必要なら
__DIR__やDOCUMENT_ROOTに直す - 本番ではエラー表示を出しっぱなしにしない
エラー文から見る場所を決める
エラー文には、PHPが実際に探したパスが出ていることがあります。サーバー上の個人名や絶対パスは外部へ貼る前に伏せつつ、どのファイルからどのファイルを読もうとしているかを見ます。
| エラー文の例 | まず見る場所 | 次にすること |
|---|---|---|
failed to open stream |
指定したパスとFTP上の実ファイル | ファイルがあるか、大文字小文字、二重フォルダを確認します。 |
Failed opening required |
必須ファイルの置き場所 | require_once __DIR__ . ... に直せるか確認します。 |
Cannot redeclare |
同じ関数やclassを複数回読んでいないか | require_once にするか、読み込み場所を1か所に寄せます。 |
Undefined function |
関数ファイルが本当に読めているか | 関数定義ファイルを必須読み込みにします。 |
ロリポップで見るところ
ロリポップ本番でだけ止まる場合は、コードだけでなくサーバー上の実体も見ます。
- FTP右側に読み込み先ファイルがあるか
- 公開フォルダの中に置くべきファイルか、非公開側に置くべき設定ファイルか
includes、Includes、includeのような表記ゆれがないか- ローカルだけにある設定ファイルを本番で読もうとしていないか
- PHPバージョンや
display_errors、エラーログの確認が必要か
AIや人に相談する時のメモ
AIやCodexへ相談する時は、秘密情報を貼らずに、読み込む側と読み込まれる側を分けて書きます。
PHPのrequire/includeで本番だけ止まっています。
エラー全文:
止まっているファイル:
行番号:
読み込もうとしているファイル:
FTP上にそのファイルがあるか:
ローカルでは動くか:
使っている書き方:
例: require / include / require_once / include_once
現在のパス指定:
ローカルのファイル構成:
本番FTP上のファイル構成:
すでに確認したこと:
- ファイルが本番にあるか:
- 大文字小文字:
- __DIR__:
- DOCUMENT_ROOT:
- エラーログ:
サーバーの絶対パス、FTP情報、DB接続情報、APIキー、個人情報は伏せています。
安全なパス指定へ直す方法を教えてください。
サーバー会社や制作会社に聞く時のメモ
コードの直し方ではなく、サーバー側で確認してほしいことがある場合は、症状、URL、エラー文、確認済み項目に絞って送ります。
PHPのinclude / require読み込みについて確認したいです。
対象URL:
起きている症状:
例: 本番だけ真っ白 / Failed opening required / 500エラー
エラー文:
読み込む側のPHP:
読み込まれる予定のファイル:
確認済み:
- FTP上にファイルがあるか:
- 大文字小文字:
- 直前に変更したファイル:
- PHPバージョン:
- エラーログ:
サーバー上の絶対パス、FTP情報、DB接続情報は伏せています。
ロリポップ側で確認すべき設定やログの場所があれば教えてください。
公式情報で確認するところ
この記事では初心者が実作業しやすい順番に並べ替えています。細かい仕様は公式情報で確認できます。
| 確認したいこと | 公式情報 | この記事での使い方 |
|---|---|---|
include の基本と読み込みパス |
PHP公式 include | 読み込み失敗時の警告、include_path、呼び出し元ディレクトリの扱いを確認します。 |
require の失敗時の挙動 |
PHP公式 require | include との違いが、失敗時に止まるかどうかであることを確認します。 |
__DIR__ の意味 |
PHP公式 マジック定数 | 現在のPHPファイル基準でパスを書く時に確認します。 |
DOCUMENT_ROOT とサーバー変数 |
PHP公式 $_SERVER | 公開ルート基準で共通パーツを読む時の参考にします。 |
| PHP設定、エラー表示、error_reporting | ロリポップ公式 PHP設定 | 本番でエラー確認が必要な時に、PHP設定や表示設定を確認します。 |