file_get_contents

ファイルの内容を全て文字列に読み込む

説明

stringfalse file_get_contents(
    string $filename,
    bool $use_include_path = false,
    resourcenull $context = null,
    int $offset = 0,
    intnull $length = null
)

この関数は file と似ていますが、 offset で指定した場所から開始し length バイト分だけ ファイルの内容を文字列に読み込むという点が異なります。 失敗した場合、file_get_contentsfalse を返します。

file_get_contentsはファイルの内容を文字列に読み込む 方法として好ましいものです。もしOSがサポートしていれば パフォーマンス向上のためにメモリマッピング技術が使用されます。

注意:

空白のような特殊な文字を有する URI をオープンする場合には、 urlencode でその URI をエンコードする必要があります。

パラメータ

filename

データを読み込みたいファイルの名前。

use_include_path

注意:

定数 FILE_USE_INCLUDE_PATH を使用して インクルードパス から探すことができます。 この定数を使うことは、強い型付け が有効になっている場合は不可能です。なぜなら、 FILE_USE_INCLUDE_PATHint だからです。 true を代わりに使いましょう。

context

stream_context_create で作成したコンテキストリソース。 独自のコンテキストを使用する必要がない場合は、このパラメータに null を指定します。

offset

元のストリーム上で、読み込みを開始するオフセット位置。 負のオフセットは、ストリームの末尾からのオフセットと解釈されます。

リモートファイルに対するシーク (offset 指定) はサポートしていません。 オフセットが小さい場合はリモートファイルでのシークがうまくいくこともありますが、 これはバッファリングされたストリーム上で動作しているだけのことです。

length

読み込むデータの最大バイト数。 デフォルトは、ファイル終端に達するまで読み込みます。 このパラメータは、フィルタが処理した後のストリームに適用されることに注意しましょう。

戻り値

読み込んだデータを返します。失敗した場合に false を返します。

警告

この関数は論理値 false を返す可能性がありますが、false として評価される値を返す可能性もあります。 詳細については 論理値の セクションを参照してください。この関数の返り値を調べるには ===演算子 を 使用してください。

エラー / 例外

filename が見つからない場合、length がゼロより小さい場合、あるいはストリーム内での指定した offset へのシークが失敗した場合に E_WARNING レベルのエラーが発生します。

file_get_contents 関数がディレクトリに対して呼び出されると、 Windows では E_WARNING レベルのエラーが発生していました。 PHP 7.4 以降では、Windows 以外のオペレーティングシステムでも同じ動きになっています。

変更履歴

バージョン 説明
8.0.0 length は、nullable になりました。
7.1.0 負の offset をサポートするようになりました。

例1 とあるウェブサイトのホームページのソースの取得と出力

<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>

例2 include_path の検索

<?php
// 厳密な型検査が有効な場合。つまり、declare(strict_types=1) の場合
$file = file_get_contents('./people.txt', true);
// 厳密な型検査が有効でない場合
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);
?>

例3 ファイルの一部の読み込み

<?php
// 21 文字目から 14 文字ぶん読み込みます
$section = file_get_contents('./people.txt', FALSE, NULL, 20, 14);
var_dump($section);
?>

上の例の出力は、 たとえば以下のようになります。

string(14) "lle Bjori Ro" 

例4 ストリームコンテキストの使用

<?php
// ストリームを作成します
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);

// 上で設定した HTTP ヘッダを使用してファイルをオープンします
$file = file_get_contents('http://www.example.com/', false, $context);
?>

注意

注意: この関数はバイナリデータに対応しています。

ヒント

fopen wrappers が有効の場合、この関数のファイル名として URL を使用することができます。ファイル名の指定方法に関する詳細は fopen を参照ください。 サポートするプロトコル/ラッパー には、さまざまなラッパーの機能やその使用法、 提供される定義済み変数などの情報がまとめられています。

警告

IIS のような、いくつかの標準に 対応してない Web サーバーは、PHP に警告を発生させるような手順でデータを送信します。 このようなサーバーを使用する場合は、 error_reporting を警告を発生しないレベルまで小さくする必要があります。 PHP では、https:// ラッパーでストリームをオープンする際に バグがある IIS サーバーソフトウエアを検出することができ、この警告を抑制することができます。 あなたが ssl:// ソケットを作成するために fsockopen を使用している場合、 自らこの警告を検出し、抑制する必要があります。

参考

  • file
  • fgets
  • fread
  • readfile
  • file_put_contents
  • stream_get_contents
  • stream_context_create
  • $http_response_header