【PHP】ファイル読み込み処理をまとめてみた
-
カテゴリ:
- PHP
PHPで頻繁に利用するファイル読み込み系処理ですが、似たような関数が数多く存在しているため、簡単ではありますがまとめてみました。
【ファイル名/ファイルパスを指定】
fopen … ファイルまたは URL をオープンする
関数を実行した段階ではファイルの内容を取得できるのではなく、ファイルを開いてポインタを返します。
<?php
$handle = fopen("c:\\folder\\resource.txt", "r");
?>
参考:http://php.net/manual/ja/function.fopen.php
file … ファイル全体を読み込んで行単位で配列に格納する
<?php
// ファイルの内容を配列に取り込みます。
// この例ではHTTPを通してURL上のHTMLソースを取得します。
$lines = file('http://www.example.com/');
// 配列をループしてHTMLをHTMLソースとして表示し、行番号もつけます。
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
// 他の例として、Webページを文字列に取り込みます。file_get_contents()も参照してください。
$html = implode('', file('http://www.example.com/'));
// オプションのパラメータは PHP 5 以降で使用できます
$trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
?>
参考:http://php.net/manual/ja/function.file.php
file_get_contents … ファイルの内容を全て文字列として読み込む
file()と処理が似ているますが、オプションでoffsetと指定した場所からmaxlen バイト分だけ取得することが可能です。
<?php
// 21 文字目から 14 文字ぶん読み込みます
$section = file_get_contents('./people.txt', FALSE, NULL, 20, 14);
var_dump($section);
?>
参考:http://php.net/manual/ja/function.file-get-contents.php
readfile … 全体をメモリに配慮しながら少しずつ標準出力に吐き出す
<?php
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
参考:http://php.net/manual/ja/function.readfile.php
【ファイルポインタを指定】
stream_get_contents … 残りのストリームを文字列に読み込む
file_get_contents()と似ていますが、 stream_get_contents() は既にファイルを開いている状態で、ファイルポインタを操作して取得します。
<?php
if ($stream = fopen('http://www.example.com', 'r')) {
// オフセット 10 から開始して、残りのすべてのページを表示します
echo stream_get_contents($stream, -1, 10);
fclose($stream);
}
if ($stream = fopen('http://www.example.net', 'r')) {
// 最初の 5 バイトを表示します
echo stream_get_contents($stream, 5);
fclose($stream);
}
?>
参考:http://php.net/manual/ja/function.stream-get-contents.php
fread … バイナリセーフなファイルの読み込み
file_get_contents()と似ていますが、fread()はバイナリデータを読み込むのに対し、file_get_contents()はデータを文字列として返します。
<?php
// ファイルの中身を読んで文字列に格納する
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>
参考:http://php.net/manual/ja/function.fread.php
fgets … ファイルポインタから1行分(\nが現れるまで)読み込む
<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
echo $buffer;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
?>
参考:http://php.net/manual/ja/function.fgets.php
fpassthru … ファイルポインタから終端(EOFが現れる)まで読み込む
<?php
// バイナリモードでファイルをオープンする
$name = './img/ok.png';
$fp = fopen($name, 'rb');
// 正しいヘッダを送出する
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// 画像をダンプしスクリプトを終了する
fpassthru($fp);
exit;
?>
参考:http://php.net/manual/ja/function.fpassthru.php
こう見ると、ファイルの読み込み処理だけでも結構ありますね。ただここで紹介した以外にもいっぱいあるので、知りたい方はここに一覧があります。