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
型です。
読み込むデータの最大バイト数を指定します。
デフォルトではファイル終端まで読み込まれます。
返り値
string
かbool
型です。
読み込みに成功した場合は文字列を返し、失敗した場合は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_path
をTRUE
にすると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引数として適当なものを答えよ
- ファイル名
- URL
- PHPコード
Q2: file_get_contents
の第2引数にTRUE
を設定した場合の挙動を答えよ
- file_get_contentsはインクルードパスからファイルを探す
- file_get_contentsは/tmpからファイルを探す
- file_get_contentsは接続中のDBからレコードを探す
Q3: file_get_contents
でファイルの一部分を読み込みたい。適当な操作を答えよ
- file_get_contentsの第2引数をFALSEにする
- file_get_contentsの第3引数をNULLにする
- file_get_contentsにオフセットと最大長を指定する
正解はこちら↓
Q1: 1, 2
Q2: 1
Q3: 3