WordPress как на ладони
rgbcode is looking for WordPress developers. Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

wp_upload_bits()WP 2.0.0

Создает файл с указанным контентом в папке загрузок (upload). Возвращает данные загруженного файла. Не размещает данные о файле в БД.

Если загрузка вызовет ошибку, то ключ возвращаемого массива "error" будет содержать сообщение об ошибке.

Функция, сравнивает расширение файла со списком разрешенных к загрузке расширений см. wp_check_filetype(), максимальный допустимый размер и т.д. Важно при проверке расширения реальный MIME тип не проверяется файла не проверяется, если нужно проверить реальный MIME типа, то используйте функцию wp_check_filetype_and_ext().

Уникализирует имя файла.

Эта функция не перемещает уже загруженный файл в папку загрузок. Она создает новый файл с контентом переданным в параметре $bits. Если вам нужно переместить файл, то считайте содержимое файла и затем передайте данные этой функции, она создаст новый файл. После этого старый файл можно удалить.

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

Работает на основе: wp_check_filetype(), wp_upload_dir(), wp_unique_filename()
Хуки из функции

Возвращает

Массив. Массив данных о работе функции, который содержит следующие данные:

Если файл загружен успешно то ключ "file" будет содержать полный путь до файла на сервере, а ключ "url" будет содержать URL файла.

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.4.3

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, you are not allowed to upload this file type.' ) );
	}

	$upload = wp_upload_dir( $time );

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

	/**
	 * Filters whether to treat the upload bits as an error.
	 *
	 * Returning a non-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 An array of upload bits data, or 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 ( str_starts_with( $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 );
	}

	/** This filter is documented in wp-admin/includes/file.php */
	return apply_filters(
		'wp_handle_upload',
		array(
			'file'  => $new_file,
			'url'   => $url,
			'type'  => $wp_filetype['type'],
			'error' => false,
		),
		'sideload'
	);
}
2 комментария
    Войти