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

Create a file in the upload folder with given content.


Description 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 Parameters

$name

(string) (Required) Filename.

$deprecated

(null|string) (Required) Never used. Set to null.

$bits

(mixed) (Required) File content

$time

(string) (Optional) Time formatted in 'yyyy/mm'.

Default value: null


Top ↑

Return Return

(array)


Top ↑

Source Source

File: wp-includes/functions.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 = 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";

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

Top ↑

Changelog Changelog

Changelog
Version Description
2.0.0 Introduced.


Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content
    Contributed by shossain571

    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 2 content
    Contributed by kacprusz

    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 3 content
    Contributed by Codex

    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.