Я создал простую функцию тестирования с циклом. Это имеет много отголосков, потому что я хочу знать, что именно происходит. Обратите внимание, что в конце цикла есть команда die, так что это не настоящий цикл. Я вызываю функцию с помощью test("523",$p);
. Это создает переменную $fname = "523.txt" и $p может быть установлено в 1; Я обнаружил, что когда я прикасаюсь к файлу и устанавливаю для него mtime, atime, такие значения, как 10, 1... stat() не возвращает правильное значение. Но если я удалю функцию (остается только внутренний код), то stat() вернет правильные значения 10 1; ... Любые идеи, что может пойти не так в моей функции?
function test($n, $p){
$fname = "$n.txt";
echo "<h4>$n at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$st = stat("$fname");
echo "; 1) previous access by ".$st['mtime']." ".$st['atime']."; ";
$fsize = filesize($fname);
if ($fsize === 0)
echo "! The fsize is 0; ";
else
{
$fp = fopen($fname, "r");
$locked = flock($fp, LOCK_SH);
$s = fread($fp, $fsize );
$success = flock($fp, LOCK_UN);
if ( $success === false )
die("; r flock release failed; ");
$success = fclose($fp);
if ( $success === false )
die("; fclose failed; ");
// 10 - data načtená , $p - prohlížeč
if ( $success )
{
$result = touch("$fname",10,$p);
echo "; TOUCH: $result;";
}
if ( strlen($s)<60 )
echo "*$s LENGTH:".strlen($s)."<br>";
}
$st = stat("$fname");
echo "; 2) previous access by ".$st['mtime']." ".$st['atime']."; ";
die;
}
}
Смотрите строки:
$result = touch("$fname",10,$p);
и
$st = stat("$fname");
Результат ; 1) previous access by 1570715111 1570715111; ; TOUCH: 1;; 2) previous access by 1570715111 1570715111;
stat
– «Примечание: результаты этой функции кэшируются. Подробнее см. в clearstatcache(). …? - person 04FS   schedule 10.10.2019