wp_upload_bits

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

Если загрузка вызовет ошибку, то ключ возвращаемого массива “error” будет содержать сообщение об ошибке (функция, проверяет тип файла, допустимый размер и т.д.). Если файл будет загружен успешно то ключ “file” будет содержать полный путь до файла на сервере, а ключ “url” будет содержать URL файла.

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

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

Хуки из функции:
wp_handle_upload
wp_upload_bits
Возвращает

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

$upload = wp_upload_bits( $name, $deprecated, $bits, $time );
$name(строка) (обязательный)
Название создаваемого файла. Указывать нужно полное название с расширением.
$deprecated(null) (обязательный)
Не используется, нужно ставить null.
$bits(строка) (обязательный)
Контент создаваемого файла в виде строки. Обычно он получается с помощью функции file_get_contents().
$time(строка)
Время в формате ГГГГ/ММ – куда помещать файл в папке загрузок. Если в настройках снята галочка с пункта “Помещать загруженные мной файлы в папки по месяцу и году”, то этот параметр не имеет смысла. По умолчанию, файл будет загружаться в текущий месяц, текущего года.
По умолчанию: null

Примеры

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

Этот пример показывает как создать файл в папке загрузок. Давайте создадим картинку. Возьмем контент внешней картинки с помощью file_get_contents() и запишем её в папку загрузок нашего сайта:

<?php
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' => __( 'Invalid file type' ) );

	$upload = wp_upload_dir( $time );

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

	/**
	 * Filters whether to treat the upload bits as an error.
	 *
	 * Passing a non-array to the filter will effectively short-circuit preparing
	 * the upload bits, returning that value instead.
	 *
	 * @since 3.0.0
	 *
	 * @param mixed $upload_bits_error An array of upload bits data, or a non-array error 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 = 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( '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";

	/** 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' );
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *