ここでは、file_get_contents 関数、file 関数、readfile 関数の3つの関数を利用してファイルを一括で読み込むサンプルコードを掲載しています。
スポンサーリンク
file_get_contents 関数
file_get_contents 関数は、バイナリファイルの読み書きにも対応していますので PDF ファイルや画像ファイルなどにも使用可能です。ただし、大きなサイズのファイルの場合に、メモリ不足が発生する可能性があります。サンプル内では、file_put_contents 関数を使用してファイルの出力も行っています。
// 入力ファイルパス $inputpath = 'path/to/input.file'; // ファイルの内容をすべて取得する $data = file_get_contents($inputpath); // 出力ファイルパス $outputpath = 'path/to/output.file'; // 取得したデータをファイルに出力する file_put_contents($outputpath, $data);
file 関数
file 関数は、ファイルの内容を1行ずつ配列要素に格納した配列てファイルの内容を取得できます。file 関数も、XML や HTML などのテキスト形式のファイルだけでなく、バイナリデータのファイルも読み込みことができます。しかし、性質上バイナリファイルの読み込みに使用することはないでしょう。
$fpath = 'path/to/read.file';
// ファイルの内容を配列(1行ずつ)で取得する
$lines = file($fpath);
// ファイルを1行ずつ出力する
foreach($lines as $line) {
echo($line);
}
readfile 関数
readfile 関数は、ファイルのダウンロードに使用されることが多いです。また、readfile 関数内で標準出力にファイルの内容を出力してしまいます。下記は強引な方法ですが、変数にファイルの内容を保持するサンプルです。実際には、ファイルのダウンロード以外に使用されることはあまりないと思います。
// 出力バッファリング開始 ob_start(); // 標準出力(出力バッファ)にデータを出力 readfile($fpath); // 出力バッファのデータを取得 $data = ob_get_contents(); // 出力バッファの削除とバッファクリア(消去) ob_end_clean(); // 標準出力へデータを出力 echo $data;
本来 readfile 関数は、以下のようにファイルのダウンロードに使用されることが多いと思います。
// 入力ファイルパス
$fpath = 'path/to/input.file';
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($fpath));
header('Content-Disposition: attachment; filename=' . basename($fpath));
// ファイルデータを標準出力に出力する(ダウンロード)
readfile($fpath);
// readfile を file_get_contents で書き換えた場合は以下のようになる
//echo file_get_contents($fpath);