С 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);
  1. как насчет отношений?

  2. когда файл flock, функция file() использует ресурс fopen?

  3. файл является независимой функцией или используйте fopen?

1 ответ

fopen а также file две разные функции.

fopen Функция fopen делает что-то совершенно другое - она ​​открывает дескриптор файла, который функционирует как поток для чтения или записи файла. Это гораздо более низкоуровневая функция, простая обертка вокруг функции C fopen, и простой вызов fopen ничего не изменит, кроме открытия потока.

file - читает весь файл в массив

Стадо на процесс. Таким образом, если один и тот же процесс (включая все потоки) пытается объединиться несколько раз, он всегда будет успешным.

Прочитайте предупреждения в конце документации: https://www.php.net/manual/en/function.flock.php

Другие вопросы по тегам