PHPでの外部ファイルの読み込み

  • PHP
  • 現在地

外部ファイルの読み込み方法

PHPでは外部ファイルを読み込む方法が複数あるので、どれを使っていいのか少しわかりにくいところがあります。

ということで、今回はファイル読み込み用の関数や構文について少しまとめてみました。

以下に記載する関数の共通パラメータのみここに記載しておきます。

filename はファイルのパスを、flags は include_path の設定を利用するか(初期値は false)を、context は stream_context_create() でオプションとして作成したストリーム(初期値は null)を設定します。

なお、太字以外のパラメータは省略可能です。

include | require | include_once | require_once
制御構文。指定したファイルを読み込み、PHPコードとして処理。(後述)
file()

指定したファイルの内容を行ごとに配列に格納。

  • file(
    • 'filename', flags, context
  • );
file_get_contents()

指定したファイルの内容をすべて文字列として読み込む。

  • file_get_contents(
    • 'filename', flags, context, offset, maxlen
  • );

offset は、バイト単位での読み込みを開始位置を指定し、maxlen は読み込みを終了する位置の指定を行う。(指定しない場合は終端まで。)

fopen()

指定したファイルを開く。

fopen() はファイルを開くだけなので、ファイルのポインタを利用する fwrite() 等の関数のために、変数に格納して置く必要があります。

  • fopen(
    • 'filename', 'mode', flags, context
  • );

mode は、ファイルを開く際のアクセス形式を指定します。下記は指定できるモード。('c' は、Ver 5.2.6 で追加されました。)

モード説明
r読み込み用。ファイルポインタは先頭から。
w書き込み用。ファイルポインタは先頭から。開いた際に内容を消去。上書き
a書き込み用。ファイルポインタは終端から。追記
c書き込み用。ファイルポインタは先頭から。部分的な上書き
x書き込み用。ファイルポインタは先頭から。ファイルが既存の場合はエラーを返し、開かず。

上記のモード値の後に '+' を付けることで、読み込み/書き込み両用となりますが、ファイルポインタの位置は変わらないため、'a' 以外はそのまま書き込むと上書きになります。

また、モード値の後に 'b' を付けることでバイナリモードに、't' を付けることでテキストモード ('\n'で改行できるように変換(windows では '\r\n' が改行)) に変換可能です。

ファイルが存在しない場合、読み込み用(r)では警告を返しますが、書き込み用の場合はファイルを作成して開きます。

最後に、fopen() で開いたファイルを格納した変数を、fclose() で指定してファイルを閉じる必要があります。

一応読み込み用の関数を記載してみましたが、詳細な変更を加えるなら fopen() を、単に文字列として取得したい場合は file_get_contents() というように使い分けた方がいいみたいです。

あと、関数の場合は変数に格納することでファイルを取得し利用できるのですが、include 等の制御構文の場合は使い方自体が違うので次はそれらの説明です。

制御構文によるファイルの読み込み

include や require 等のファイルを読み込む制御構文についてはこちらで記述しておきます。

  • include文

    include文では、下記のように読み込みたいファイル名を指定するだけです。

    include 'ファイルのパス';

    ちなみに、関数のようにファイルのパスを'()'でくくっても動作します。また include_path の設定によって、別のディレクトリにあってもファイル名だけで指定できます。

    include で読み込まれたファイルはその時点でPHPコードとして評価するので、PHPタグ(<?php ?>)に囲まれていない部分は、そのまま表示され、タグ内は読み込んだ位置で処理をおこないます。

    なので、ただのHTMLファイルをテンプレートとして利用したり、サーバー上でPHPを処理できない拡張子(.htaccess等で設定していない場合)のファイルでも、PHPタグに囲まれていればコードの処理が行われます。

    なお、指定したファイルが存在しない場合、警告(warning)が返されることになりますが、処理は続行されます。

  • require文

    形式も動作も include文と同様ですが、1つ違いがあり、指定したファイルが存在しない場合、警告と併せてエラー(Fatal error)を返すために処理が停止します。

  • include_once文とrequire_once文

    include_once は include と、require_once は require とそれぞれ同様の動作を行いますが、'_once' をつけた構文では、一度も読み込まれていないファイルのみを読み込みます。

    つまり、すでに一度読み込まれているファイルを include_once で指定しても、読み込むという処理自体が行われません。

スポンサードリンク

inserted by FC2 system