Когда следует использовать API файловой системы? Должен ли я вообще его использовать?
Мне интересно, когда рекомендуется использовать API файловой системы и полезно ли это вообще?
WordPress кажется немного непоследовательным, когда дело доходит до использования API файловой системы, он использует API только в нескольких местах при загрузке и распаковке файлов, и для меня это не имеет особого смысла, я имею в виду, где вообще стоит использовать его, когда есть много других ситуаций, когда функции файловой системы PHP используются для прямого доступа? Загрузка пакетов будет работать даже при наличии "проблем" с владением, однако я почти уверен, что эти "проблемы" не исчезнут через 5 минут, когда я использую любую из функций, которые используют, например, fwrite напрямую.
Так почему я, как разработчик плагинов/тем, должен заботиться об этом в любом случае, когда половина функций WordPress, которые я использую, не зависит от API файловой системы, мой плагин/тема все равно не будет работать правильно, не так ли?
1 answers
Существует небольшое практическое разделение относительно того, где WP может записывать файлы и вызывается ли Filesystem API
. Возможно, было бы проще рассматривать это разделение не как техническое, а как административное.
Есть пользовательское пространство.
Пользователи должны иметь возможность создавать вложения и не должны иметь учетные данные администратора.
Для этих требований каталог загрузки обычно требует слабых разрешений, и код, который работает с ним, обычно не используя Filesystem API
.
Остальное - это пространство администратора .
Администраторы/разработчики должны иметь возможность (более) писать что угодно (плагины, темы, само ядро WP) и иметь учетные данные администратора.
Для такой функциональности код использует Filesystem API
и запросит учетные данные, если он не может выполнить задачу без них.
Таким образом, эмпирическое правило для распространяемого кода разработки примерно таково - каталог загрузок один и только поместите в установку WP, где вы можете ожидать выполнения записи без использования Filesystem API
.