wp_upload_bits() WP 2.0.0

Створює файл із зазначеним контентом у папці завантажень (upload). Повертає дані завантаженого файлу. Не розміщує дані про файл у БД.

Якщо завантаження викличе помилку, то ключ масиву ” error “, що повертається, міститиме повідомлення про помилку.

Функція порівнює розширення файлу зі списком дозволених до завантаження розширень див wp_check_filetype_and_ext() .

Уніфікує ім’я файлу.

Ця функція не переміщує завантажений файл до папки завантажень. Вона створює новий файл із вмістом, переданим у $bits. Якщо вам потрібно перемістити файл, то рахуйте вміст файлу і потім передайте дані цієї функції, вона створить новий файл. Після цього можна видалити старий файл.

Права доступу до файлу будуть встановлені автоматично відповідно до параметрів системи.

Працює на основі:
wp_check_filetype() ,
wp_upload_dir() ,
wp_unique_filename()

Хуки з функції
array( 'file' => '/var/www/wp-content/uploads/2010/03/example.pdf', // шлях 'url' => 'http://example.com/wp-content/uploads/2010/03/example.pdf', // урл 'type' => 'application/pdf', 'error' => false, // сюди записується повідомлення про помилку у разі помилки )

Використання

$upload = wp_upload_bits($name, $deprecated, $bits, $time);
$name
(рядок) (обов’язковий)
Назва файлу, що створюється. Вказувати потрібно повну назву із розширенням.
$deprecated
(null) (обов’язковий)
Чи не використовується, потрібно ставити null.
$bits
(рядок) (обов’язковий)
Контент створюваного файлу у вигляді рядка. Зазвичай він виходить з допомогою функції file_get_contents().
$time
(рядок)
Час у форматі
РРРР/ММ – куди поміщати файл у папці завантажень. Якщо в налаштуваннях знято галочку з пункту “Поміщати завантажені мною файли в папки за місяцем та роком”, то цей параметр не має сенсу. За промовчанням, файл буде завантажуватися в поточний місяць цього року.


Типово: null

Приклади

0

#1 Демонстрація

Цей приклад показує, як створити файл у папці завантажень. Давайте створимо картинку. Візьмемо контент зовнішньої картинки за допомогою file_get_contents() та запишемо її в папку завантажень нашого сайту:

$cont = file_get_contents('http://example.com/some_img.png');
$new_file_name = 'uploaded.png';
$ upload = wp_upload_bits ($ new_file_name, null, $ cont);

// перевіримо чи вийшов запис
if( $upload['error'] )
	echo 'Запис викликав помилку: '. $upload['error'];
else
	echo 'Запис удався! Шлях файлу: '. $upload['file'] .'; УРЛ файлу: '. $upload['url'];

У прикладі ми бачимо, що масив $upload виглядає так:

Array (
	[file] => /home/user/site/public_html/wp-content/2013/03/uploaded.png
	[url] => http://example.com/wp-content/uploads/2013/03/uploaded.png
	[type] => image/png
	[error] =>
)

Тепер, наприклад, ми можемо вивести на екран завантажену картинку, використовуючи url:

<img src="<?php echo $upload['url'] ?>" />
0

#2 Створення файлу з форми

Цей приклад показує, як створити файл, переданий у формі. Передбачається, що запит зроблено з форми з полем field1:

$upload = wp_upload_bits( $_FILES["field1"]["name"], null, file_get_contents( $_FILES["field1"]["tmp_name"]) );

Ця функція намагається зберегти копію файлу, що завантажується в каталог завантажень WordPress. Вона також виконує функцію безпеки, перевіряючи файл (тип файлу, розмір тощо) і повертає помилку, якщо якийсь із параметрів не допустимо. Після завантаження бажано видалити тимчасовий файл.

список змін

З версії 2.0.0Введено.

Код wp_upload_bits() WP 6.0.2

function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '2.0.0');
	}

	if (empty($name)) {
		return array( 'error' => __( 'Empty filename' ) );
	}

	$wp_filetype = wp_check_filetype($name);
	if ( ! $wp_filetype['ext'] && ! current_user_can( 'unfiltered_upload' ) ) {
		return array( 'error' => __( 'Sorry, ви не можете завантажити цей тип файлу.' ) );
	}

	$upload = wp_upload_dir($time);

	if ( false !== $upload['error'] ) {
		return $upload;
	}

	/**
	 * Filters whether to treat the upload bits як an error.
	 *
	 * Returning a no-array from the filter will effectively short-circuit preparing the upload bits
	 * and return that value instead. An error message should be returned as a string.
	 *
	 * @ Since 3.0.0
	 *
	 * @param array|string $upload_bits_error На array of upload bits data, або error message to return.
	 */
	$upload_bits_error = apply_filters(
		'wp_upload_bits',
		array(
			'name' => $name,
			'bits' => $bits,
			'time' => $time,
		)
	);
	if ( ! is_array( $upload_bits_error ) ) {
		$upload['error'] = $upload_bits_error;
		return $upload;
	}

	$filename = wp_unique_filename($upload['path'], $name);

	$new_file = $upload['path'] . "/$filename";
	if ( ! wp_mkdir_p ( dirname ( $ new_file ) ) ) {
		if ( 0 === strpos( $upload['basedir'], ABSPATH ) ) {
			$error_path = str_replace( ABSPATH, '', $upload['basedir'] ) . $upload['subdir'];
		} else {
			$error_path = wp_basename( $upload['basedir'] ) . $upload['subdir'];
		}

		$message = sprintf(
			/* translators: %s: Directory path. */
			__( 'Unable to create directory %s. Is its parent directory writable by the server?' ),
			$error_path
		);
		return array( 'error' => $message );
	}

	$ifp = @fopen($new_file, 'wb');
	if (! $ifp) {
		return array(
			/* translators: %s: File name. */
			'error' => sprintf( __( 'Could not write file %s' ), ​​$new_file ),
		);
	}

	fwrite($ifp, $bits);
	fclose($ifp);
	clearstatcache();

	// Set correct file permissions.
	$ stat = @ stat (dirname ($ new_file));
	$perms = $stat['mode'] & 0007777;
	$perms = $perms & 0000666;
	chmod ($ new_file, $ perms);
	clearstatcache();

	// Compute the URL.
	$url = $upload['url'] . "/$filename";

	if ( is_multisite() ) {
		clean_dirsize_cache($new_file);
	}

	/** Цей filter is documented в wp-admin/includes/file.php */
	return apply_filters(
		'wp_handle_upload',
		array(
			'file' => $new_file,
			'url' => $url,
			'type' => $wp_filetype['type'],
			'error' => false,
		),
		'sideload'
	);
}

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

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