PHPのfile_get_contentsの使い方: ファイルやURLの内容を読み込む
目次
- PHPのfile_get_contentsの使い方
- file_get_contentsの構造
- テキストファイルの内容を読み込む
- 存在しないファイルを読み込む
- URLからリソースを読み込む
- use_include_pathを使う
- コンテキストを作成する
- ファイルの一部を読み込む
- 問題
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