requireとincludeの違い
PHPで共通ヘッダー、設定ファイル、関数ファイルを読み込む時に使うのが require と include です。どちらも別ファイルを読み込む命令ですが、失敗した時の止まり方が違います。
この記事では、ロリポップ本番で「ローカルでは動くのに本番だけ真っ白」「Failed opening required が出る」という時に、どちらを使うべきか、どのパスを確認するかを整理します。
読み込み失敗時の考え方
重要な設定は require、任意表示は include。本番ではパス、ファイル名、大文字小文字を先に確認します。
違いは「失敗した時に止まるか」
| 命令 | 読み込み失敗時 | 向いているもの |
|---|---|---|
require | Fatal errorで止まる | DB設定、関数、認証、必須の共通処理 |
include | Warningを出して続く場合がある | 任意の広告、補助パーツ、なくてもページを出せるもの |
require_once | 同じファイルを1回だけ必須読み込み | 関数定義、class定義、設定ファイル |
include_once | 同じファイルを1回だけ任意読み込み | 重複読み込みを避けたい補助パーツ |
基本の使い分け
そのファイルがないと処理してはいけないなら require、なくてもページの一部が欠けるだけなら include と考えると分かりやすいです。
- DB接続設定は
require_once - 関数やclass定義は
require_once - ナビ、フッター、メタタグなど共通パーツは運用方針により
includeまたはrequire - 広告や任意の案内枠は
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';
テンプレートからサイト共通のナビを読むような場合は、公開ルートを基準にする DOCUMENT_ROOT も使えます。
<?php include($_SERVER['DOCUMENT_ROOT'] . "/nav.php"); ?>
本番で確認する順番
- エラー文のファイル名と行番号を見る
- 読み込み先のファイルがFTP上にあるか確認する
- 大文字小文字が一致しているか確認する
../の数が階層に合っているか見る- 必要なら
__DIR__やDOCUMENT_ROOTに直す - 本番ではエラー表示を出しっぱなしにしない
AIや人に相談する時のメモ
PHPのrequire/includeで本番だけ止まっています。
エラー全文:
止まっているファイル:
行番号:
読み込もうとしているファイル:
FTP上にそのファイルがあるか:
ローカルでは動くか:
使っている書き方:
例: require / include / require_once / include_once
安全なパス指定へ直す方法を教えてください。