ユーニックス総合研究所

  • home
  • archives
  • php-file-get-contents

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

  • 作成日: 2020-09-23
  • 更新日: 2023-12-24
  • カテゴリ: PHP

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