wp_unique_filename

Definition:
function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) {}

Get a filename that is sanitized and unique for the given directory.
If the filename is not unique, then a number will be added to the filename before the extension, and will continue adding numbers until the filename is unique.

Parameters

  • string $dir
  • string $filename
  • mixed $unique_filename_callback: Callback.

Return values

returns:New filename, if given wasn’t unique.

Source code

function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) {

	// sanitize the file name before we begin processing

	$filename = sanitize_file_name($filename);



	// separate the filename into a name and extension

	$info = pathinfo($filename);

	$ext = !empty($info['extension']) ? '.' . $info['extension'] : '';

	$name = basename($filename, $ext);



	// edge case: if file is named '.ext', treat as an empty name

	if ( $name === $ext )

		$name = '';



	// Increment the file number until we have a unique file to save in $dir. Use callback if supplied.

	if ( $unique_filename_callback && is_callable( $unique_filename_callback ) ) {

		$filename = call_user_func( $unique_filename_callback, $dir, $name, $ext );

	} else {

		$number = '';



		// change '.ext' to lower case

		if ( $ext && strtolower($ext) != $ext ) {

			$ext2 = strtolower($ext);

			$filename2 = preg_replace( '|' . preg_quote($ext) . '$|', $ext2, $filename );



			// check for both lower and upper case extension or image sub-sizes may be overwritten

			while ( file_exists($dir . "/$filename") || file_exists($dir . "/$filename2") ) {

				$new_number = $number + 1;

				$filename = str_replace( "$number$ext", "$new_number$ext", $filename );

				$filename2 = str_replace( "$number$ext2", "$new_number$ext2", $filename2 );

				$number = $new_number;

			}

			return $filename2;

		}



		while ( file_exists( $dir . "/$filename" ) ) {

			if ( '' == "$number$ext" )

				$filename = $filename . ++$number . $ext;

			else

				$filename = str_replace( "$number$ext", ++$number . $ext, $filename );

		}

	}



	return $filename;

}

4191

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: