初心者コーダーのための
HTML/CSS JavaScript PHP WordPress
難しい言葉や概念より、実践重視の入門ブログ
PHP

【PHP】外部のPHPファイルを読み込む方法【requireとincludeの違いと使い分け】

【PHP】外部ファイル読み込み rewuire?include?外部ファイルを読み込ませよう!

何度も使いまわしたいテンプレートのパーツがある際、PHPはとっても便利!
そのパーツを切り出してphp形式のファイルで保存することで、別ファイルから読み込ませることができます。

複数のファイルで出力ができる一方、管理は1ファイルで済むので、メンテナンス性に非常に優れています。

今回は、パーツとして作成したphpファイルを、他のページから読み込む方法を紹介します。

基本構文

外部のファイルを読み込ませる方法は、2つあります。

<?php require('パス'); ?>
<?php include('パス'); ?>

読み込むことができるファイルはphp形式に限らず、html形式なども読み込むことができます。
ただhtmlにしておく必要も特にないので、php形式にしておくのがベターです。

外部ファイル読み込み体験教室

まずは「index.php」を作成し、下記をコピペしましょう。

<?php require('parts.php'); ?>

次に「index.php」と同じ階層(同じフォルダ)に「parts.php」を作成し、下記をコピペしましょう。
読み込ませるだけなので、別にコピペじゃなくても好きなこと書いてもOK

<p>ほらね</p>

これで index.php をブラウザで見ると、外部からファイルが読み込めていることが確認できました!
しかも何度でも無限に呼び出すことができます。する必要なんてほぼありませんが!

<?php require('parts.php'); ?>
<?php require('parts.php'); ?>
<?php require('parts.php'); ?>

これで3回読み込んでいることが確認できました。
「で?」って思われるかもしれないですが、これに関連することが後ほど登場します!

requireとincludeの違い

適切に外部ファイルの読み込みに成功した時、その結果は全く同じで、何も違いはありません。

ただし読み込みに失敗したとき
例えば読み込み先のファイルがなくなったときや、パスの指定を間違えているとき、処理に違いが発生します。

includeは読み込みに失敗しても処理が進んでいく

includeは読み込みに失敗した場合、それを無視して処理が進んでいきます。

<?php include('おもち.php'); ?>
<p>読み込みに失敗しても処理が継続していきます。</p>

コードをコピペして確認すると、ファイルの読み込みには失敗していますが、その下のpタグは通常に出力されていることがわかります。

requireは読み込みに失敗した時点で以降の処理が中断する

それに対しrequireは、読み込み失敗した時点で処理を終了し、以降全て処理されなくなります。

<?php require('おもち.php'); ?>
<p>処理自体が終了したので、このpタグは出力されない。</p>

コピペすると先ほどのincludeとは違い、pタグが出力されていませんね。

requireとincludeの使い分け

読み込みに成功した場合の結果は全く同じなので、読み込みに失敗することでどうなるのかが使い分けのポイント。

致命的なエラーを引き起こす原因となり得る場合はrequire

読み込みに失敗することで、それ以降にも致命的な支障がでる場合は迷わずrequireを使いましょう。

例えば読み込む予定のパーツに何らかのphp処理が含まれていて、その結果が以降の処理に影響を与えている場合などです。

読み込みに失敗してもまあ許容範囲の場合はinclude

ヘッダーやフッターなど、まあなければいけないものではあるのだが、最悪無くても死にはしない。
そんな時はincludeを使いましょう。
ヘッダーの読み込みに失敗したところで、問題なくコンテンツを見てもらえることができます。

迷ったらrequire

とりあえず迷ったらrequire使っとけば間違いないっす。

_onceで一度しか読み込めなくする

一番最初の体験で、requireやincludeは何度でも同じファイルを読み込めることを紹介しました。

ただ、読み込む先のファイルにPHPの記述がごちゃごちゃ書かれていて、2回読み込むことでエラーが発生してしまうことがあります。

その場合、たとえ間違って2回読み込ませても、1回しか読み込んでくれないようにすることができます。

<?php include_once('パス'); ?>
<?php require_once('パス'); ?>

_onceをつけることで、1度しか読み込ませないでくださいね、と指示をしています。

<?php include_once('parts.php'); ?>
<?php require_once('parts.php'); ?>

これを試してみましょう!

includeとrequireで1回ずつ同じファイルを読み込ませていますが、きちんと1度しか読み込まれていませんね。