Загрузка файлов в WordPress

Вопрос или проблема

У меня есть плагин, который я создаю, и в системе загрузки файлов у меня есть следующее:

$mimes = array('image/jpeg','image/jpg','image/gif','image/png','application/pdf');
if(in_array($_FILES['attach']['type'], $mimes)){
    $error = 0;
}
else {
    $error = 1;
}

Затем, наряду с другой проверкой ошибок, у меня есть это, чтобы загружать файлы в пользовательскую папку:

if($error == 0) {
    $folder = PLUGIN_DIR . '/uploads/';
    if(is_dir($folder)) {
        $file = $_FILES["attach"]["tmp_name"];
        move_uploaded_file($file, $folder.date('Ymd').'_'.$name);
    }
}

Это работает идеально. Я это протестировал, но нормально ли это так делать? Или есть лучший способ?

Заранее спасибо!

У WordPress есть свой способ обработки загрузки файлов, поэтому лучше следовать их примеру. Он выполняет некоторую проверку файлов, но если вы хотите быть строгими с MIME-типами, я бы оставил код, который у вас был изначально,

Вот код, который может заменить ваш второй блок, чтобы фактически загрузить файл (модифицированный с примера в Кодексе по приведенной выше ссылке):

// Загружаем обработчик файлов
    if ( ! function_exists( 'wp_handle_upload' ) ) {
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
    }

// Измените вашу директорию загрузки
function wpse_271103_upload_dir(){
    return PLUGIN_DIR . '/uploads/';
}

// Регистрируем наш переопределенный путь.
add_filter( 'upload_dir', 'wpse_271103_upload_dir' );

// Указываем, откуда брать файл
$uploadedfile = $_FILES["attach"]["tmp_name"];

// Выполняем перемещение файла
$movefile = wp_handle_upload( $uploadedfile );

// Возвращаем все в норму.
remove_filter( 'upload_dir', 'wpse_271103_upload_dir' );

// Возвращаем ошибку, если это не удалось
if ( ! $movefile || isset( $movefile['error'] ) ) {

    echo $movefile['error'];
}

Ответ или решение

Загрузка файлов в WordPress: Усовершенствование вашего плагина

Работа с загрузкой файлов в WordPress — это важный аспект, который требует внимательного подхода к безопасности и правильному управлению ресурсами. Давайте рассмотрим, как можно улучшить ваше решение, используя функции, предлагаемые самой платформой.

Проблема с текущей реализацией

Ваш код показывает, что вы проверяете MIME-типы загружаемых файлов, что является хорошей практикой. Однако, ручная обработка загрузки файлов может привести к некоторым проблемам, включая несовместимость с будущими версиями WordPress и возможные уязвимости безопасности. WordPress предоставляет встроенные функции для обработки загрузки, которые лучше использовать для управления файлами.

Рекомендации по улучшению кода

Вместо вашего текущего подхода я бы предложил воспользоваться функцией wp_handle_upload, которая упрощает процесс загрузки и предоставляет ряд дополнительных возможностей для обработки ошибок и управления метаданными. Ниже представлен усовершенствованный код, который вы можете использовать.

// Загрузка обработчика файлов
if ( ! function_exists( 'wp_handle_upload' ) ) {
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
}

// Изменение директории загрузки
function wpse_271103_upload_dir() {
    return PLUGIN_DIR . '/uploads/';
}

// Регистрация переопределения пути
add_filter( 'upload_dir', 'wpse_271103_upload_dir' );

// Получение временного файла
$uploadedfile = $_FILES["attach"];

// Проверка MIME-типов
$mimes = array('image/jpeg', 'image/jpg', 'image/gif', 'image/png', 'application/pdf');
if (in_array($uploadedfile['type'], $mimes)) {

    // Перемещение файла
    $movefile = wp_handle_upload($uploadedfile, array('test_form' => false));

    // Возврат к стандартным настройкам
    remove_filter( 'upload_dir', 'wpse_271103_upload_dir' );

    // Обработка ошибок
    if ( !$movefile || isset($movefile['error']) ) {
        echo 'Ошибка: ' . $movefile['error'];
    } else {
        echo 'Файл был успешно загружен: ' . $movefile['url'];
    }
} else {
    echo 'Ошибка: Неверный MIME-тип файла.';
}

Преимущества использования wp_handle_upload

  1. Безопасность: Функция автоматически обрабатывает аспекты безопасности, минимизируя риск загрузки вредоносных файлов.

  2. Управление метаданными: wp_handle_upload возвращает массив с информацией о загруженном файле, включая URL и путь к файлу на сервере.

  3. Гибкость: Вы можете настроить дополнительное поведение, добавляя свои фильтры и хуки.

  4. Соответствие стандартам: Использование встроенных функций WordPress обеспечивает вашу совместимость с будущими обновлениями системы.

Заключение

Следуя вышеизложенным рекомендациям, вы значительно улучшите свою систему загрузки файлов. Это не только сделает ваш плагин более надежным и безопасным, но и облегчит его поддержку в будущем. Работа с WordPress всегда должна идти в ногу с её стандартами для достижения максимальной производительности и согласованности.

Оцените материал
Добавить комментарий

Капча загружается...