WordPress как на ладони
wordpress jino

wp_upload_bits() WP 2.0

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

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

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

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

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

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

array(
	'file' => '/var/www/wordpress/wp-content/uploads/2010/03/example.pdf', // путь
	'url' => 'http://example.com/wp-content/uploads/2010/03/example.pdf', // урл
	'error' => false, // сюда записывается сообщение об ошибке в случае ошибки
)

Использование

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

Примеры

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

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

$cont = file_get_contents('http://site.ru/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://site.ru/wp-content/uploads/2013/03/uploaded.png 
	[error] => 
)

Теперь, например, мы можем вывести на экран загруженную картинку используя url:

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

#2 Создание файла из формы

Этот пример показывает как создать файл переданный в форме. Предполагается, что запрос сделан с формы с полем field1:

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

Эта функция пытается сохранить копию загружаемого файла в каталог загрузок WordPress. Она также выполняет функцию безопасности, проверяя файл (тип файла, размер и т.д.) и возвращает ошибку, если какой либо из параметров не допустим. После загрузки желательно удалить временный файл.

Код wp upload bits: wp-includes/functions.php WP 4.9

<?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' => __( 'Sorry, this file type is not permitted for security reasons.' ) );

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

Cвязанные функции

Из метки: upload (файловая система file загрузка)

Еще из раздела: Загрузка (upload)

wp_upload_bits 2 комментария

Здравствуйте, !

Ваш комментарий