При разработке плагинов или тем для WordPress часто возникает необходимость сохранять временные файлы, которые не должны попадать в медиабиблиотеку и не должны храниться постоянно. Использование стандартных папок для таких целей может приводить к путанице или потере данных. В этой статье мы подробно разберём, как правильно использовать функцию wpupload_wp_upload_dir(), аналог стандартной wp_upload_dir(), чтобы организовать кэширование временных файлов в безопасной и удобной директории.
Что такое WP Upload Dir и зачем его использовать для временных файлов
Функция wp_upload_dir() возвращает массив с путями к папкам для загрузки медиафайлов. Однако загруженные файлы попадают в медиабиблиотеку и индексируются WordPress, что не всегда нужно для временных данных.
Плагин или тема могут пользоваться wpupload_wp_upload_dir() — аналогом, который модифицирует путь и URL, позволяя создавать отдельную папку для временных или кэшируемых файлов внутри директории загрузок. Это упрощает управление, очистку и защиту таких файлов.
В случае с WP Upload Dir можно кастомизировать путь, создавая папки с уникальными именами, например, «/cache/temp/».
Как получить директорию для временных файлов с помощью WP Upload Dir
Для начала разберём, как получить путь к папке загрузок и создать в ней поддиректорию для временных файлов.
function wpupload_get_temp_dir() {
$upload = wpupload_wp_upload_dir();
$temp_dir = $upload['basedir'] . '/cache/temp';
if ( ! file_exists( $temp_dir ) ) {
wp_mkdir_p( $temp_dir );
}
return $temp_dir;
}
Этот код:
- Вызывает функцию
wpupload_wp_upload_dir()для получения текущего пути загрузок. - Добавляет путь к кэшируемой папке
/cache/temp. - Проверяет наличие папки и создаёт её при отсутствии.
- Возвращает абсолютный путь к временной папке.
Таким образом, у вас есть безопасное место для временного хранения.
Пример сохранения временного файла
Предположим, нужно сохранить во временную папку результат обработки файла, например, сгенерированный CSV или JSON. Вот пример кода, который создаст такой файл с данными:
function wpupload_save_temp_file( $filename, $content ) {
$temp_dir = wpupload_get_temp_dir();
$file_path = trailingslashit( $temp_dir ) . $filename;
file_put_contents( $file_path, $content );
return $file_path;
}
// Пример использования:
$data = json_encode( array( 'time' => time(), 'status' => 'ok' ) );
$file = wpupload_save_temp_file( 'data.json', $data );
echo 'Файл сохранён: ' . $file;
Такой подход позволяет безопасно создавать временные файлы, которые можно очищать по расписанию.
Автоматическая очистка временных файлов с WP Upload Dir
Чтобы кэш не разрастался, полезно настроить автоочистку временных файлов, например, удаление файлов старше 24 часов.
Добавим функцию, которая сканирует папку и удаляет устаревшие файлы:
function wpupload_cleanup_temp_files() {
$temp_dir = wpupload_get_temp_dir();
if ( ! is_dir( $temp_dir ) ) {
return;
}
$files = glob( $temp_dir . '/*' );
$now = time();
foreach ( $files as $file ) {
if ( is_file( $file ) ) {
$filetime = filemtime( $file );
// Удаляем файлы старше 24 часов
if ( ( $now - $filetime ) > 86400 ) {
unlink( $file );
}
}
}
}
// Можно привязать к крону WordPress
add_action( 'wp_loaded', 'wpupload_cleanup_temp_files' );
Такой простой механизм позволяет держать временные файлы под контролем и не засорять сервер.
Безопасность временных файлов и доступ к ним
Папка внутри uploads обычно доступна по URL, поэтому важно ограничить прямой доступ к временным данным, если они содержат чувствительную информацию.
Для этого можно добавить в папку /cache/temp файл .htaccess с правилами запрета доступа:
# Запретить доступ ко всем файлам в этой директории
Order deny,allow
Deny from all
Или использовать PHP для отдачи файлов только авторизованным пользователям через обработчик.
Заключение с рекомендациями по использованию WP Upload Dir для временных файлов
Использование wpupload_wp_upload_dir() — правильный способ структурировать хранение временных и кэшируемых файлов в WordPress. Это позволяет:
- Не смешивать временные файлы с медиа.
- Легко управлять, очищать и защищать такие файлы.
- Использовать привычные API WordPress для работы с директориями.
Если хотите получить расширенные возможности по работе с загрузками, обратите внимание на WP Upload Dir — плагин с удобным интерфейсом и гибкими настройками.