wp_handle_upload() WP 2.0.0

Обробляє завантаження файлу через $_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

Приклади

0

#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'];
	}

}

нотатки

список змін

З версії 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *