🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

requireとincludeの違い

PHPで共通ヘッダー、設定ファイル、関数ファイルを読み込む時に使うのが requireinclude です。どちらも別ファイルを読み込む命令ですが、失敗した時の止まり方が違います。

この記事では、ロリポップ本番で「ローカルでは動くのに本番だけ真っ白」「Failed opening required が出る」という時に、どちらを使うべきか、どのパスを確認するかを整理します。

読み込み失敗時の考え方

重要な設定は require、任意表示は include。本番ではパス、ファイル名、大文字小文字を先に確認します。

PHPのrequireとincludeで重要設定はrequire、任意パーツはincludeを使い、読み込み失敗時にパス、ファイル名、大文字小文字、FTP上の置き場所を確認する図解

違いは「失敗した時に止まるか」

命令読み込み失敗時向いているもの
requireFatal errorで止まるDB設定、関数、認証、必須の共通処理
includeWarningを出して続く場合がある任意の広告、補助パーツ、なくてもページを出せるもの
require_once同じファイルを1回だけ必須読み込み関数定義、class定義、設定ファイル
include_once同じファイルを1回だけ任意読み込み重複読み込みを避けたい補助パーツ

基本の使い分け

そのファイルがないと処理してはいけないなら require、なくてもページの一部が欠けるだけなら include と考えると分かりやすいです。

本番で止まる典型例

症状原因候補確認すること
Failed opening required読み込み先が見つからないFTP上にファイルがあるか、パスが合うか
ローカルだけ動くWindowsと本番で大文字小文字の扱いが違うMeta.phpmeta.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"); ?>

本番で確認する順番

  1. エラー文のファイル名と行番号を見る
  2. 読み込み先のファイルがFTP上にあるか確認する
  3. 大文字小文字が一致しているか確認する
  4. ../ の数が階層に合っているか見る
  5. 必要なら __DIR__DOCUMENT_ROOT に直す
  6. 本番ではエラー表示を出しっぱなしにしない

AIや人に相談する時のメモ

PHPのrequire/includeで本番だけ止まっています。

エラー全文:

止まっているファイル:

行番号:

読み込もうとしているファイル:

FTP上にそのファイルがあるか:

ローカルでは動くか:

使っている書き方:
例: require / include / require_once / include_once

安全なパス指定へ直す方法を教えてください。

関連記事