С php fopen() flock() file() Почему это работает так
Так что если я открою один файл с + как
fopen($filepath,'a+');
file($filepath);
а затем я использую файл ($filepath), чтобы получить содержимое файла, все в порядке
но почему я, когда я заблокировал файл с помощью flock, я также могу использовать функцию file() для получения содержимого, почему?
$fp = fopen($filepath, "a+");
while (1) {
$f =flock($fp,LOCK_EX);
if($f){
fwrite($fp,'abc');
echo "ok loked \n";
sleep(1);
$te =file($filepath);
if(strlen($te[0])==10){
echo "this is cont ".$te[0]."\n";
echo "ok this the end \n";
ftruncate($fp,0);
fflush($fp);
}
flock($fp, LOCK_UN);
break;
}
}
fclose($fp);
как насчет отношений?
когда файл flock, функция file() использует ресурс fopen?
файл является независимой функцией или используйте fopen?
1 ответ
fopen
а также file
две разные функции.
fopen Функция fopen делает что-то совершенно другое - она открывает дескриптор файла, который функционирует как поток для чтения или записи файла. Это гораздо более низкоуровневая функция, простая обертка вокруг функции C fopen, и простой вызов fopen ничего не изменит, кроме открытия потока.
file - читает весь файл в массив
Стадо на процесс. Таким образом, если один и тот же процесс (включая все потоки) пытается объединиться несколько раз, он всегда будет успешным.
Прочитайте предупреждения в конце документации: https://www.php.net/manual/en/function.flock.php