# WP_UPLOAD_BITS() │ WP 2.0.0
Функция wp_upload_bits() создает файл в папке для загрузки с заданным содержимым.
Если возникает ошибка, в массиве вернется ключ error с сообщением об ошибке. Если все прошло успешно, то будет возвращен ключ file с уникальным путем к файлу, ключ url с ссылкой на новый файл и ключ error, который будет равен false.
Обратите внимание, что эта функция не перемещает загруженный файл в папку загрузок. Она создает новый файл с содержимым, полученным из параметра $bits. Если вы хотите переместить загруженный файл, сначала прочитайте его содержимое, а затем передайте имя файла и содержимое в эту функцию, чтобы добавить файл в папку загрузок.
Права доступа для нового файла устанавливаются автоматически.
## Использует:
- wp_check_filetype()
- wp_upload_dir()
- wp_unique_filename()
## Хуки
- wp_upload_bits
- wp_handle_upload
## Возврат
Функция возвращает массив с информацией о новом загруженном файле.
## Применение
```php
wp_upload_bits( $name, $deprecated, $bits, $time );
Где:
$name(string) (обязательный) — имя файла.$deprecated(null|string) (обязательный) — не используется. Устанавливается вnull.$bits(string) (обязательный) — содержимое файла.$time(string|null) — время в формате 'yyyy/mm'. По умолчаниюnull.
Примеры
Пример 1: Как загрузить файл в собственный каталог в WordPress
Этот пример загружает PDF-документ в папку wp-content/uploads/customDirectory:
global $wp_filesystem;
WP_Filesystem();
$content_directory = $wp_filesystem->wp_content_dir() . 'uploads';
$custom_dirname = 'CustomDirectory';
$wp_filesystem->mkdir( "$content_directory/$custom_dirname" );
$target_dir_location = "$content_directory/$custom_dirname";
if ( isset( $_POST['submittheform'] ) && isset( $_FILES['fileToUpload'] ) ) {
$name_file = $_FILES['fileToUpload']['name'];
$tmp_name = $_FILES['fileToUpload']['tmp_name'];
$cont = file_get_contents( $tmp_name );
$upload = wp_upload_bits( $name_file, null, $cont );
// Проверяем наличие ошибки
if( $upload['error'] ) {
echo 'Произошла ошибка: '. $upload['error'];
} else {
$move = move_uploaded_file( $upload['file'], "$target_dir_location/$name_file" );
if ( $move ) {
echo "Файл был успешно загружен";
} else {
echo "Файл не был загружен";
}
}
}
Пример 2: Демонстрация загрузки файла в папку
Этот пример показывает, как создать файл в папке загрузок. Создадим изображение, взяв его содержимое с внешней ссылки:
$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'] .'; URL файла: '. $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:

Пример 3: Создание файла из формы
Этот пример показывает, как создать файл, передав его через форму. Предполагается, что запрос сделан из формы с "field1":
$upload = wp_upload_bits(
$_FILES["field1"]["name"],
null,
file_get_contents( $_FILES["field1"]["tmp_name"] )
);
Эта функция пытается сохранить копию загруженного файла в директории загрузок WordPress. Она также выполняет проверку безопасности, проверяя тип файла, размер и т.д., и возвращает ошибку, если какие-либо параметры не соответствуют требованиям. После загрузки рекомендуется удалить временный файл.
Журнал изменений
Функция была представлена в версии 2.0.0.
Код функции
function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
if ( ! empty( $deprecated ) ) {
_deprecated_argument( __FUNCTION__, '2.0.0' );
}
if ( empty( $name ) ) {
return array( 'error' => __( 'Пустое имя файла' ) );
}
$wp_filetype = wp_check_filetype( $name );
if ( ! $wp_filetype['ext'] && ! current_user_can( 'unfiltered_upload' ) ) {
return array( 'error' => __( 'Извините, вы не можете загружать файлы этого типа.' ) );
}
$upload = wp_upload_dir( $time );
if ( false !== $upload['error'] ) {
return $upload;
}
$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(
__( 'Не удалось создать директорию %s. Родительская директория доступна для записи?' ),
$error_path
);
return array( 'error' => $message );
}
$ifp = @fopen( $new_file, 'wb' );
if ( ! $ifp ) {
return array(
'error' => sprintf( __( 'Не удалось записать файл %s' ), $new_file ),
);
}
fwrite( $ifp, $bits );
fclose( $ifp );
clearstatcache();
// Установите правильные права доступа к файлу
$stat = @ stat( dirname( $new_file ) );
$perms = $stat['mode'] & 0007777;
$perms = $perms & 0000666;
chmod( $new_file, $perms );
clearstatcache();
// Вычисляем URL
$url = $upload['url'] . "/$filename";
if ( is_multisite() ) {
clean_dirsize_cache( $new_file );
}
return apply_filters(
'wp_handle_upload',
array(
'file' => $new_file,
'url' => $url,
'type' => $wp_filetype['type'],
'error' => false,
),
'sideload'
);
}
Эта улучшенная статья объясняет, как использовать функцию wp_upload_bits() в WordPress, с примерами и понятными разъяснениями для начинающих.