Как `fopen` перед `rename` все еще читает старый контент с помощью PHPPhp

Кемеровские программисты php общаются здесь
Anonymous
Как `fopen` перед `rename` все еще читает старый контент с помощью PHP

Сообщение Anonymous »

Приведенный ниже код открывает дескриптор файла () в определенный файл, затем я перезаписываю этот файл (используя rename), а затем читаю содержимое этого файла с помощью fread. Что меня поражает, так это то, что при чтении файла с помощью fread он по-прежнему указывает на содержимое исходного файла (до перезаписи)! Как это произошло? Я думаю, что это было бы возможно только в том случае, если бы fopen создал полную копию файла, чтобы его можно было прочитать позже, но я не могу поверить, что fopen создает полную копию файла, потому что это было бы очень неэффективно. Удивительно, но приведенный выше код выводит aaaaaaaaaaaaaa111111, но он должен выводить bbbbbbbbbbbbbb222222. Если перед fread я использую fclose и снова открываю файл, он работает как положено (показано новое содержимое).
Мой вопрос в том, как PHP все еще может чтобы показать содержимое исходного файла, который уже был перезаписан! Я не могу поверить, что PHP создал полную копию файла, когда я вызвал fopen.
Приведенный выше код отлично работает в Linux, однако в Windows он не будет работать, поскольку использование rename< /code> для файла, уже открытого с помощью fopen, выдаст ошибку — в Linux все в порядке, ошибок нет.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -using-php

Вернуться в «Php»