TRY AND ERROR

気になったこと、勉強したこと、その他雑記など色々メモしていきます。。Sometimes these posts will be written in English.,

【PHP】巨大ファイルを読み込むとき

PHPでサイズの大きいファイルを読み込む時のメモ。


外部ファイルを全部読み込めればOK、ただし読み込めなかった場合には
エラーを返すというロジックを組みたかった。


たとえば、外部サイトをスクレイピングする際に、
HTMLファイルサイズが一定サイズを超える場合は取得しないよー、みたいなことです。
(もちろん法的に問題ない範囲での話ですが。。。)


file_get_contentsではオプションで読み込むバイト数を指定することはできますが、
この場合途中までの不完全なファイルになってしまう。


なので、1KBずつ読んで指定サイズを超えるた場合にエラー、
最後まで読みきれた場合はそのコンテンツを返す関数をつくってみた。

function ex_file_get_contents($uri, $maxSize) {
    $data = '';
    $size = 0;
    $K = 1024; //バイト計算上の1KB(≒10^3)
    $fp = @fopen($uri, "r");
    if ($fp) {
        while (!feof($fp)) {
            if ($size > $maxSize) {
				// 最大サイズを超えた時点で処理終了
            	@fclose($fp);
            	return false;
         	}
         	$data .= @fread($fp, $K);
         	$size += $K;
        }
        @fclose($fp);
    } else {
        return false;
    }
    return $data;
}