Switch language
wpseek on Twitter


A WordPress-centric search engine for devs and theme authors




wp_mkdir_p [ ]

wp_mkdir_p ( $target )
Parameters:
  • (string) $target Full path to attempt to create.
Returns:
  • (bool) Whether the path was created. True if path already exists.
Defined at:
Codex



Recursive directory creation based on full path.

Will attempt to set permissions on folders.

Source

function wp_mkdir_p( $target ) {
	$wrapper = null;

	// strip the protocol
	if( wp_is_stream( $target ) ) {
		list( $wrapper, $target ) = explode( '://', $target, 2 );
	}

	// from php.net/mkdir user contributed notes
	$target = str_replace( '//', '/', $target );

	// put the wrapper back on the target
	if( $wrapper !== null ) {
		$target = $wrapper . '://' . $target;
	}

	// safe mode fails with a trailing slash under certain PHP versions.
	$target = rtrim($target, '/'); // Use rtrim() instead of untrailingslashit to avoid formatting.php dependency.
	if ( empty($target) )
		$target = '/';

	if ( file_exists( $target ) )
		return @is_dir( $target );

	// We need to find the permissions of the parent folder that exists and inherit that.
	$target_parent = dirname( $target );
	while ( '.' != $target_parent && ! is_dir( $target_parent ) ) {
		$target_parent = dirname( $target_parent );
	}

	// Get the permission bits.
	$dir_perms = false;
	if ( $stat = @stat( $target_parent ) ) {
		$dir_perms = $stat['mode'] & 0007777;
	} else {
		$dir_perms = 0777;
	}

	if ( @mkdir( $target, $dir_perms, true ) ) {

		// If a umask is set that modifies $dir_perms, we'll have to re-set the $dir_perms correctly with chmod()
		if ( $dir_perms != ( $dir_perms & ~umask() ) ) {
			$folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) );
			for ( $i = 1; $i <= count( $folder_parts ); $i++ ) {
				@chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms );
			}
		}

		return true;
	}

	return false;
}

Top Google Search Results

More ...

User Note(s)