scandir() возвращает разные результаты в DirectoryIterator

У меня есть старая функция PHP, которая использует DirectoryIterator для перебора файлов в каталоге. Сегодня я перезагрузил нашу бродячую виртуальную машину, повторно запустил функцию и обнаружил, что она возвращает только «точечные» записи (. и ..).

Запуск scandir() в том же каталоге возвращает полный список файлов, поэтому я временно переписал функцию, чтобы использовать вместо нее scandir.

Версия DirectoryIterator существует уже много лет и всегда указывает на один и тот же жестко закодированный каталог. Я не могу понять, почему теперь он не возвращает файлы, а только «точечные» записи. Версия DirectoryIterator отлично возвращает полный список файлов на машине коллеги. Похоже, это не проблема с правами доступа к файлам, поскольку scandir() работает правильно в том же контексте кода.

Я в тупике для объяснения. Кто-нибудь знает, почему это может произойти?


person Nick W.    schedule 28.01.2020    source источник
comment
Просто столкнулся с той же проблемой. Каковы были ваши выводы по этому поводу?   -  person Marko Čepo    schedule 10.12.2020
comment
Я нашел ответ. Это было связано с механизмом каталога синхронизации, используемым vagrant/virtualbox. По умолчанию используется встроенный механизм общих папок от virtualbox. Я изменил Vagrantfile, чтобы вместо этого использовать nfs в качестве механизма синхронизации каталогов, это решило проблему (я использую хост-систему Linux, вам может понадобиться SMB или что-то еще, если вы используете хост Windows). Контрольным признаком было то, что DirectoryIterator работал правильно, когда я попробовал его в другом каталоге, который находился за пределами моего синхронизированного каталога с хоста. См. здесь: vagrantup.com/docs/synced-folders/basic_usage.   -  person Nick W.    schedule 12.12.2020
comment
Также см. этот вопрос, откуда я получил ответ: каталоги в бродячих синхронизированных папках"> stackoverflow.com/questions/63207799/   -  person Nick W.    schedule 12.12.2020