Дата последнего изменения в папках на веб-сервере PHP - PullRequest
0 голосов
/ 20 декабря 2011

Я создал онлайн файловую систему, основанную на php, без использования баз данных. Это работает хорошо, но есть один момент, раздражающий меня:

Всякий раз, когда я редактирую, перемещаю, переименовываю файлы в папке, только непосредственный родитель (папка) получает изменение даты (последнее редактирование). Все остальные папки ранее в дереве сохраняют дату редактирования ...

Есть ли способ сделать это последнее редактирование возможным без редактирования каждой из папок (что наверняка означало бы потерю производительности).

Я знаю, что решение с базой данных было бы неплохо, но успех нашей файловой системы в простоте (сейчас не требуется БД).

Спасибо за ваши советы!

1 Ответ

1 голос
/ 28 декабря 2011

Я предполагаю, что файлы и каталоги в вашей "онлайн" / виртуальной файловой системе взаимно однозначно соответствуют файлам и каталогам в базовой (серверной) файловой системе.

Обычная семантика файловой системы POSIX такова, чтоКаталог mtime обновляется только при добавлении, удалении или переименовании файлов в каталоге.Внесение таких изменений в каталог не приводит к изменению mtime в любых родительских каталогах.Редактирование файла в каталоге также не меняет mtime каталога, только mtime самого файла.(Вы упомянули в своем вопросе, что редактирование файла в каталоге делает причиной обновления времени родительского каталога, но я думаю, что это, вероятно, потому, что вы редактируете файлы, делая новую копию и переименовывая ее поверхoriginal.)

Если вы хотите, чтобы также изменилось время изменения родительских каталогов, и вы хотите записать эту информацию в самой файловой системе, вам нужно сделать это вручную, касаясь каждого родительского каталога.вплоть до корня.Вероятно, это не приведет к значительному снижению производительности: вы можете использовать функцию touch, которая должна составлять более или менее одного системного вызова utime на каталог.

-Phil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...