public static function get_filename_from_disposition( $disposition_header ) {
		// Get the filename.
		$filename = null;

		foreach ( $disposition_header as $value ) {
			$value = trim( $value );

			if ( strpos( $value, ';' ) === false ) {
				continue;
			}

			list( $type, $attr_parts ) = explode( ';', $value, 2 );
			$attr_parts = explode( ';', $attr_parts );
			$attributes = array();
			foreach ( $attr_parts as $part ) {
				if ( strpos( $part, '=' ) === false ) {
					continue;
				}

				list( $key, $value ) = explode( '=', $part, 2 );
				$attributes[ trim( $key ) ] = trim( $value );
			}

			if ( empty( $attributes['filename'] ) ) {
				continue;
			}

			$filename = trim( $attributes['filename'] );

			// Unquote quoted filename, but after trimming.
			if ( substr( $filename, 0, 1 ) === '"' && substr( $filename, -1, 1 ) === '"' ) {
				$filename = substr( $filename, 1, -1 );
			}
		}

		return $filename;
	}
public static function get_filename_from_disposition( $disposition_header ) {
		// Get the filename.
		$filename = null;

		foreach ( $disposition_header as $value ) {
			$value = trim( $value );

			if ( strpos( $value, ';' ) === false ) {
				continue;
			}

			list( $type, $attr_parts ) = explode( ';', $value, 2 );
			$attr_parts = explode( ';', $attr_parts );
			$attributes = array();
			foreach ( $attr_parts as $part ) {
				if ( strpos( $part, '=' ) === false ) {
					continue;
				}

				list( $key, $value ) = explode( '=', $part, 2 );
				$attributes[ trim( $key ) ] = trim( $value );
			}

			if ( empty( $attributes['filename'] ) ) {
				continue;
			}

			$filename = trim( $attributes['filename'] );

			// Unquote quoted filename, but after trimming.
			if ( substr( $filename, 0, 1 ) === '"' && substr( $filename, -1, 1 ) === '"' ) {
				$filename = substr( $filename, 1, -1 );
			}
		}

		return $filename;
	}
public static function get_filename_from_disposition ( $ disposition_header ) { // Get the filename. $ filename = null ; foreach ( $ disposition_header as $ value ) { $ value = trim ( $ value ) ; if ( strpos ( $ value , ';' ) === false ) { continue ; } list ( $ type , $ attr_parts ) = explode ( ';' , $ value , 2 ) ; $ attr_parts = explode ( ';' , $ attr_parts ) ; $ attributes = array ( ) ; foreach ( $ attr_parts as $ part ) { if ( strpos ( $ part , '=' ) === false ) { continue ; } list ( $ key , $ value ) = explode ( '=' , $ part , 2 ) ; $ attributes [ trim ( $ key ) ] = trim ( $ value ) ; } if ( empty ( $ attributes [ 'filename' ] ) ) { continue ; } $ filename = trim ( $ attributes [ 'filename' ] ) ; // Unquote quoted filename, but after trimming. if ( substr ( $ filename , 0 , 1 ) === '"' && substr ( $ filename , - 1 , 1 ) === '"' ) { $ filename = substr ( $ filename , 1 , - 1 ) ; } } return $ filename ; }
Parse filename from a Content-Disposition header value.

As per RFC6266:

content-disposition = "Content-Disposition" ":"
disposition-type *( ";" disposition-parm )

disposition-type    = "inline" | "attachment" | disp-ext-type
; case-insensitive
disp-ext-type       = token

disposition-parm    = filename-parm | disp-ext-parm

filename-parm       = "filename" "=" value
| "filename*" "=" ext-value

disp-ext-parm       = token "=" value
| ext-token "=" ext-value
ext-token           = <the characters in token, followed by "*">

@see http://tools.ietf.org/html/rfc2388
@see http://tools.ietf.org/html/rfc6266

@param string[] $disposition_header List of Content-Disposition header values.
@return string|null Filename if available, or null if not found.
Parse filename from a Content - Disposition header value .