PHPでfilesizeバイトだけfreadすると、途中までしか読み取れないことがある問題について


スポンサーリンク

PHPでファイルを読む方法の1つに

$fp = fopen($filename, 'r');
$data = fread($fp, filesize($filename));
fclose($fp);

という、fopen, fread, fcloseを用いたものがあります。

しかし、このfilesize関数でファイルの状態(サイズ)を読み取ると、状態をPHPのキャッシュから取得してしまう場合があります。短時間に書き込み・読み出しを行うと、古くなったキャッシュを読んでしまうことがあり、古いファイルサイズを取得してしまうようです。

clearstatcache();
$fp = fopen($filename, 'r');
$data = fread($fp, filesize($filename));
fclose($fp);

このようにclearstatcache関数を利用するか、

$data = file_get_contents($filename);

このようにfile_get_contentsを利用することで、古くなったキャッシュの利用を回避でき、ファイルを全て読み取ることができるようになります。

以上となります。
ご覧いただきありがとうございました。

この記事への感想を教えてください
  • 内容が十分
  • 内容が足りなかったが役立った
  • 内容が足りず役立たなかった
  • 求めている記事ではなかった
last

フォローする