我想知道fstat()是否被快取。
檔案對此只字不提。
(PHP 8.1.12)
uj5u.com熱心網友回復:
我做了一個快速演示,似乎表明它沒有被快取。但是,也請參閱編輯
$filename = __DIR__.'/test.txt';
@unlink($filename);
touch($filename);
echo 'STAT - Size before write: '.stat($filename)['size'], PHP_EOL;
file_put_contents($filename, 'test');
echo 'STAT - Size after write: '.stat($filename)['size'], PHP_EOL;
clearstatcache();
echo 'STAT - Size after cache clear: '.stat($filename)['size'], PHP_EOL;
@unlink($filename);
touch($filename);
$fp = fopen($filename, 'wb');
echo 'FSTAT - Size before write: '.fstat($fp)['size'], PHP_EOL;
fwrite($fp, 'test');
echo 'FSTAT - Size after write: '.fstat($fp)['size'], PHP_EOL;
clearstatcache();
echo 'FSTAT - Size after cache clear: '.fstat($fp)['size'], PHP_EOL;
輸出:
STAT - Size before write: 0
STAT - Size after write: 0
STAT - Size after cache clear: 4
FSTAT - Size before write: 0
FSTAT - Size after write: 4
FSTAT - Size after cache clear: 4
編輯
根據@Barmar,我再次運行了測驗,這次只fstat呼叫了一個 sleep(10),然后我用 vim 手動快速更新了檔案,然后是最后一個fstat呼叫(都在同一個請求中),然后那個作為快取回傳。
然后我再次運行它,這次是clearstatcache()在決賽之前fstat,它沒有改變。我還嘗試了 bothw和rmodes for的測驗fopen,結果相同。
所以似乎確實有某種快取,但我不認為它是統計快取。
uj5u.com熱心網友回復:
作為補充:
我也做了 Chris Haas 在評論中描述的測驗。
/*
* Open test.txt with a text editor
* Run this script
* Add some characters in the editor and save while the script is running
*/
$file = __DIR__.'/../test/test.txt';
$fp = fopen($file,'r');
$size[] = fstat($fp)['size'];
sleep(10);
$size[] = fstat($fp)['size'];
var_dump($size);
//array(2) { [0]=> int(3) [1]=> int(13) }
Win10 和小型 Linux 上的 PHP 結果相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535725.html
標籤:PHP缓存文档
上一篇:如何按列名動態應用單元格格式?
