wp_upload_bits( string $name, null|string $deprecated, string $bits, string $time = null ): array

Creates a file in the upload folder with given content.

Description

If there is an error, then the key ‘error’ will exist with the error message.
If success, then the key ‘file’ will have the unique file path, the ‘url’ key will have the link to the new file. and the ‘error’ key will be set to false.

This function will not move an uploaded file to the upload folder. It will create a new file with the content in $bits parameter. If you move the upload file, read the content of the uploaded file, and then you can give the filename and content to this function, which will add it to the upload folder.

The permissions will be set on the new file automatically by this function.

Parameters

$namestringrequired
Filename.
$deprecatednull|stringrequired
Never used. Set to null.
$bitsstringrequired
File content
$timestringoptional
Time formatted in 'yyyy/mm'.

Default:null

Return

array Information about the newly-uploaded file.
  • file string
    Filename of the newly-uploaded file.
  • url string
    URL of the uploaded file.
  • type string
    File type.
  • error string|false
    Error message, if there has been an error.

Source

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

Hooks

apply_filters( ‘wp_handle_upload’, array $upload, string $context )

Filters the data array for the uploaded file.

apply_filters( ‘wp_upload_bits’, array|string $upload_bits_error )

Filters whether to treat the upload bits as an error.

Changelog

VersionDescription
2.0.0Introduced.

User Contributed Notes

  1. Skip to note 5 content

    The function returns an array with the following keys:

    • file – The file system path to the uploaded file (e.g. /var/www/wordpress/wp-content/uploads/2010/03/example.pdf)
    • url – The URL to the uploaded file (e.g. http://example.com/wp-content/uploads/2010/03/example.pdf)
    • type – The file type as given by wp_check_filetype() [‘type’] (e.g. image/jpeg )
    • error – When something goes wrong with the upload, the error message is stored in this key. Otherwise set to false
  2. Skip to note 6 content

    If you have multiple files upload, you must get length of arrays in your $_FILES array, after that loop with for.

        
    if(isset($_FILES['your_field'])){
            $length = sizeof($_FILES['your_field']['name']);
    
            for ($i=0; $i < $length; $i++) { 
                wp_upload_bits($_FILES['your_field']['name'][$i], null, file_get_contents($_FILES['your_field']['tmp_name'][$i]));
            }
        }
  3. Skip to note 7 content

    HOW TO UPLOAD FILES TO A CUSTOM DIRECTORY IN WORDPRESS
    This example uploads a PDF document in the wp-content/uploads/customDirectory folder

    <form action="" method="post" enctype="multipart/form-data">
      Select image to upload:
      <input type="file" name="fileToUpload" id="fileToUpload">
      <br>
      <input type="submit" value="Upload Image" name="submittheform">
    </form>
    
    global $wp_filesystem;
    WP_Filesystem();
    
    $content_directory = $wp_filesystem->wp_content_dir() . 'uploads/';
    $wp_filesystem->mkdir( $content_directory . 'CustomDirectory' );
    $target_dir_location = $content_directory . 'CustomDirectory/';
    
    if ( isset( $_POST['submittheform'] ) && isset( $_FILES['fileToUpload'] ) ) {
        $name_file = $_FILES['fileToUpload']['name'];
        $tmp_name = $_FILES['fileToUpload']['tmp_name'];
    
        if ( move_uploaded_file( $tmp_name, $target_dir_location . $name_file ) ) {
            echo "File was successfully uploaded";
        } else {
            echo "The file was not uploaded";
        }
    }
  4. Skip to note 8 content

    Basic Example
    A simple example assuming the request was made from a form with a file field called field1:

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

    The function attempts to save a copy of the uploaded file to the upload directory set in the WordPress settings. It also performs security checks (file type, size, etc) and returns errors if any (see Return Values above). You might want to remove the tmp file after uploading.

You must log in before being able to contribute a note or feedback.