【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

  こう見ると、ファイルの読み込み処理だけでも結構ありますね。ただここで紹介した以外にもいっぱいあるので、知りたい方はここに一覧があります。



投稿日:2018-07-17    更新日:2020-10-15

[スポンサーリンク]

[スポンサーリンク]

  
関連記事
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
サイト内検索
プロフィール

プロフィール

[Name : POCO(@PocoIt2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

カテゴリ


タグ

[スポンサーリンク]

最近の記事