wp_handle_upload()
Обробляє завантаження файлу через $_FILES . Перевіряє файл та переміщує його до папки UPLOADS.
Перед обробкою файлу функція перевіряє та готує завантажуваний файл:
- очищає назву файлу і унікалізація його якщо потрібно.
- перевіряє розширення файлу (з урахуванням mime типу).
- зберігає файл у відповідний каталог
/wp-content/uploads/
.
Функція працює безпосередньо з масивом `$_FILES
– це не завжди зручно. Іноді зручніше вказати дані файлу в масиві та обробити їх, використовуючи media_handle_sideload() .
Дивіться wp_handle_sideload() – аналог цієї функції тільки працює з переданими даними файлу, а не з масивом $_FILES .
Працює на основі PHP функції move_uploaded_file() .
_wp_handle_upload()
media_handle_upload()
Хуків немає.
Повертає
Массив
.
При успішному завантаженні повертає асоціативний масив даних такого формату:
Array ( [file] => sites/example.com/www/wp-content/uploads/2014/06/Daft-Punk-Something-About-Us.mp3 [url] => http://example.com/wp-content/uploads/2014/06/Daft-Punk-Something-About-Us.mp3 [type] => audio/mpeg )
type і file можна використовувати функції wp_insert_attachment() .
При невдачі, повертає:
$overrides[upload_error_handler]()
– результат виклику функції, коли вказано параметр upload_error_handler , у якому вказано функцію обробки помилки.array( 'error'=>$message )
– за промовчанням, коли не вказано функцію обробки помилки.
Використання
$movefile = wp_handle_upload( $file, $overrides, $time );
-
& $file
(масив) (обов’язковий) Елемент масиву $_FILES , який містить масив даних про прийнятий файл (назва, тип, розмір, тимчасове розташування).
Параметр передається за посиланням (&$file), тому потрібно передавати змінну.
Array ( [name] => MyFile.txt // береться з форми браузера, тому не довіряємо [type] => text/plain // Тип файлу. Береться звідкись із браузера - не довіряємо [tmp_name] => /tmp/php/php1h4j1o // сам файл - дані файлу у файлі. Можна довіряти [error] => UPLOAD_ERR_OK // = 0 [size] => 123 // Розмір файлу в байтах - 1 КБ = 1024 Байт )
-
$overrides
(масив) Асоціативний масив
name => value
, дозволяє змінити дефолтні змінні використовувані функції (змінні витягуються так: extract( $overrides, EXTR_OVERWRITE ) ).Щоб відбулося реальне завантаження файлу, обов’язково потрібно вказати параметр
'test_form' => FALSE
, в іншому випадку це буде просто тестування роботи форми.Можливі параметри:
upload_error_handler (рядок) – назва функції обробки помилок. За замовчуванням
wp_handle_upload_error
. Функція отримує два параметри&$file
та$file['error']
unique_filename_callback (рядок) – своя функція унікалізації імені файлу. Типово: null .
- Параметри тестування:
- test_form (true/false) — Типово: true .
- test_size (true/false) — Типово: true .
- test_type (true/false) – при перевизначенні потрібно вказати $ext і $type . Типово: true.
- mimes (true/false) – при перевизначенні потрібно вказати $ext і $type . Типово: false .
Типово: false
-
$time
(рядок) -
Час у форматі
yyyy/mm
, використовується для створення шляху папки куди буде завантажено файл-папки в
uploads
. Передається до
wp_upload_dir() , щоб переписати папку завантаження за замовчуванням.
Типово: null
Приклади
#1 Завантаження файлу
Приклад використання функції. Показує, як завантажити файл у каталог WP “uploads”, який передається у формі. Нехай так виглядає наша форма:
<form enctype="multipart/form-data" action="" method="POST"> <?php wp_nonce_field( 'my_file_upload', 'fileup_nonce'); ?> <input name="my_file_upload" type="file" /> <input type="submit" value="Завантажити файл" /> </form>
Атрибут є enctype="multipart/form-data"
обов’язковим, щоб форма могла працювати з файлами. Інакше поле type="file"
просто нічого не передаватиме в $_FILES .
Тоді код завантаження файлу буде таким:
if( wp_verify_nonce( $_POST['fileup_nonce'], 'my_file_upload' ) ){ if ( ! function_exists( 'wp_handle_upload' ) ) require_once(ABSPATH. 'wp-admin/includes/file.php'); $file = & $_FILES['my_file_upload']; $overrides = ['test_form' => false]; $movefile = wp_handle_upload( $file, $overrides ); if ( $movefile && empty($movefile['error']) ) { echo "Файл був успішно завантажений.n"; print_r($movefile); } else { echo "Можливі атаки під час завантаження файлу!n"; } }
Або для завантаження кількох файлів.
$files = & $_FILES['my_file_upload']; foreach ( $files['name'] as $key => $value ) { if( empty( $files['name'][ $key ] ) ){ continue; } $file = array( 'name' => $files['name'][ $key ], 'type' => $files['type'][ $key ], 'tmp_name' => $files['tmp_name'][ $key ], 'error' => $files['error'][ $key ], 'size' => $files['size'][ $key ], ); $movefile = wp_handle_upload( $file, [ 'test_form' => false ] ); if( $movefile && empty( $movefile['error'] ) ){ echo "Файл був успішно uploaded."; print_r($movefile); } else { echo $movefile['error']; } }
нотатки
- Дивіться: _wp_handle_upload()
список змін
З версії 2.0.0 | Введено. |
wp handle upload WP 6.0.2
function wp_handle_upload( &$file, $overrides = false, $time = null ) { /* * $_POST['action'] must be set and its value must equal $overrides['action'] * or this: */ $action = 'wp_handle_upload'; if ( isset( $overrides['action'] ) ) { $action = $overrides['action']; } return _wp_handle_upload( $file, $overrides, $time, $action ); }