Создание каталога в загрузках - wp mkdir p() или файловая система WP?
Я не думаю, что у меня когда-либо была практическая необходимость создавать папки/файлы в WP раньше, но для плагина мне нужна папка кэша (для изображений с измененным размером) в wp-content/uploads
.
В связи с чем возникает вопрос - действительно ли мне нужно пройти весь процесс с Filesystem API
( включая беспорядочный запрос учетных данных FTP, когда это необходимо), или wp_mkdir_p()
достаточно ли хорошо для этого?
3 answers
wp-content/uploads/
должен быть доступен для записи на сервер (в противном случае было бы невозможно загрузить файл, не так ли?). Если вы собираетесь создать что-то в этом каталоге, это безопасно использовать wp_mkdir_p()
.
Я бы использовал WP_Filesystem
только в том случае, если есть вероятность, что у сервера нет разрешений на запись в местоположение, как в wp-content/plugins/
, которое не обязательно должно быть доступно для записи для сервера (по крайней мере, я думаю, что это не обязательно?).
Примечание: Страница Разрешений на файлы Кодекса также говорит о каталоге wp-content/cache/
. Будет ли это "более стандартным" расположением для файлов кэша?
Я бы попробовал что-нибудь простое, прежде чем возиться с бесконечным морем возможностей/настроек хостинга:
$target = 'wherever';
wp_mkdir_p( $target );
if ( wp_mkdir_p( $target ) === TRUE )
{
echo "Folder $target successfully created";
}
else
{
new WP_Error; #... etc. Just tell where the user has to make a new folder with the name xy
// or if you're kool, you use _doing_it_wrong(); ... ;-)
}
Просто предупреждаю, что ваш плагин создает файлы/папки: мой плагин тоже это сделал, и я столкнулся с множеством проблем с разрешениями на файлы для разных пользователей. Некоторые из них - windows, некоторые - unix, некоторые размещены на хостинге, а некоторые выращены дома. Это было мое электронное письмо поддержки № 1, как только я поделился плагином.
Я переработал свой код, чтобы свести к минимуму необходимость прикасаться к файловым системам, и каталог загрузки - ЕДИНСТВЕННЫЙ, который я сейчас использую, чтобы избежать подобных проблем.