Приведенный ниже код открывает дескриптор файла (
) в определенный файл, затем я перезаписываю этот файл (используя 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