PHPのfile_get_contentsの使い方: ファイルやURLの内容を読み込む

56, 2020-09-24

目次

PHPのfile_get_contentsの使い方

PHPにはファイルやURLの内容を文字列として取得する関数file_get_contentsがあります。

file_get_contentsは↓のように使います。

<?php

// ファイル'sample.txt'の内容を文字列として取得
$contents = file_get_contents('sample.txt');
echo $contents;

?>

出力結果。

cat
dog
bird

file_get_contentsの構造

file_get_contentsは↓のような構造を持っています。

<?php

file_get_contents(ファイル名, use_include_path, コンテキスト, オフセット, 最大長);

?>

ファイル名以降の引数は省略することが出来ます。

<?php

file_get_contents('file.txt');
file_get_contents('file.txt', FALSE, NULL, 0, 1024);

?>

ファイル名(第1引数)

string型です。
ファイル名かURLを文字列で指定します。

use_include_path(第2引数)

bool型です。
強い型付けが無効の場合は、定数FILE_USE_INCLUDE_PATHを指定するとインクルードパスから第1引数のファイルを探すことが出来ます。
強い型付けが有効の場合はFILE_USE_INCLUDE_PATHは整数のため指定できません。代わりにTRUEを使います。

コンテキスト(第3引数)

resource型です。
stream_context_create()で作成したリソースを指定します。
コンテキストが必要ない場合はNULLを指定します。

オフセット(第4引数)

int型です。
ストリーム上の読み込みを開始するオフセット位置を指定します。
負のオフセットはストリームの末尾から計算されます。

最大長(第5引数)

int型です。
読み込むデータの最大バイト数を指定します。
デフォルトではファイル終端まで読み込まれます。

返り値

stringbool型です。
読み込みに成功した場合は文字列を返し、失敗した場合はFALSEを返します。

テキストファイルの内容を読み込む

テキストファイルsample.txtの内容を読み込みます。

<?php

// ファイル'sample.txt'の内容を文字列として取得
$contents = file_get_contents('sample.txt');
echo $contents;

?>

出力結果。

cat
dog
bird

存在しないファイルを読み込む

存在しないファイルの場合file_get_contentsは警告を出力します。

<?php

file_get_contents('nothing.txt');

?>

出力結果。

PHP Warning:  file_get_contents(nothing.txt): failed to open stream: No such file or directory in sample.php on line 3

URLからリソースを読み込む

URLを指定してそのURLの内容を取得します。

<?php

$ip = file_get_contents('https://yu-nix.com/getip/');
echo $ip;

?>

出力結果。

xxx.xxx.xxx.xxx

use_include_pathを使う

第2引数のuse_include_pathTRUEにするとfile_get_contentsはインクルードパスを基点に第1引数のファイルを探します。
現在のインクルードパスはget_include_path()で確認することが出来ます。
↓の場合、インクルードパスに/usr/share/phpが追加されています。
/usr/share/php/test.txtをテストで作成し、それを読み込んでいます。

<?php

echo "include path: " . get_include_path() . "\n";
$contents = file_get_contents('test.txt', true);
echo $contents;

?>
include path: .:/usr/share/php
This is test text.

コンテキストを作成する

URLの内容をゲットするときにタイムアウト時間を設定するには↓のようにコンテキストを指定します。

<?php

$ctx = stream_context_create([
    'http' => [
        'timeout' => 1,
    ]
]);

$ip = file_get_contents('https://yu-nix.com/getip/', false, $ctx);
echo $ip;

?>

↑の場合、リクエストは1秒でタイムアウトします。
タイムアウトした場合は↓のような警告が出力されます。

PHP Warning:  file_get_contents(https://yu-nix.com/getip/): failed to open stream: HTTP request failed!  in sample.php on line 8

ファイルの一部を読み込む

オフセットと最大長を指定してファイルの一部分を読み込みます。

<?php

$contents = file_get_contents('sample.txt', false, NULL, 4, 1024);
echo $contents;

?>

出力結果。

dog
bird

問題

Q1: file_get_contentsの第1引数として適当なものを答えよ

  1. ファイル名

  2. URL

  3. PHPコード

Q2: file_get_contentsの第2引数にTRUEを設定した場合の挙動を答えよ

  1. file_get_contentsはインクルードパスからファイルを探す

  2. file_get_contentsは/tmpからファイルを探す

  3. file_get_contentsは接続中のDBからレコードを探す

Q3: file_get_contentsでファイルの一部分を読み込みたい。適当な操作を答えよ

  1. file_get_contentsの第2引数をFALSEにする

  2. file_get_contentsの第3引数をNULLにする

  3. file_get_contentsにオフセットと最大長を指定する


正解はこちら↓

Q1: 1, 2
Q2: 1
Q3: 3