Upload path fixes from tellyworth. see #5953
git-svn-id: http://svn.automattic.com/wordpress/trunk@6984 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
dce0978cee
commit
038910ae4e
|
@ -1022,17 +1022,39 @@ function wp_mkdir_p( $target ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test if a give filesystem path is absolute ('/foo/bar', 'c:\windows')
|
||||||
|
function path_is_absolute( $path ) {
|
||||||
|
// this is definitive if true but fails if $path does not exist or contains a symbolic link
|
||||||
|
if ( realpath($path) == $path )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if ( strlen($path) == 0 || $path{0} == '.' )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// windows allows absolute paths like this
|
||||||
|
if ( preg_match('#^[a-zA-Z]:\\\\#', $path) )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// a path starting with / or \ is absolute; anything else is relative
|
||||||
|
return (bool) preg_match('#^[/\\\\]#', $path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Join two filesystem paths together (e.g. 'give me $path relative to $base')
|
||||||
|
function path_join( $base, $path ) {
|
||||||
|
if ( path_is_absolute($path) )
|
||||||
|
return $path;
|
||||||
|
|
||||||
|
return rtrim($base, '/') . '/' . ltrim($path, '/');
|
||||||
|
}
|
||||||
|
|
||||||
// Returns an array containing the current upload directory's path and url, or an error message.
|
// Returns an array containing the current upload directory's path and url, or an error message.
|
||||||
function wp_upload_dir( $time = NULL ) {
|
function wp_upload_dir( $time = NULL ) {
|
||||||
$siteurl = get_option( 'siteurl' );
|
$siteurl = get_option( 'siteurl' );
|
||||||
$upload_path = $dir = get_option( 'upload_path' );
|
$upload_path = $dir = get_option( 'upload_path' );
|
||||||
|
|
||||||
if ( $upload_path != realpath( $upload_path ) ) { // not an absolute path
|
// $dir is absolute, $path is (maybe) relative to ABSPATH
|
||||||
//prepend ABSPATH to $dir and $siteurl to $url if they're not already there
|
$dir = path_join( ABSPATH, $upload_path );
|
||||||
$path = str_replace( ABSPATH, '', trim( $upload_path ) );
|
$path = str_replace( ABSPATH, '', trim( $upload_path ) );
|
||||||
$dir = ABSPATH . $path;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !$url = get_option( 'upload_url_path' ) )
|
if ( !$url = get_option( 'upload_url_path' ) )
|
||||||
$url = trailingslashit( $siteurl ) . $path;
|
$url = trailingslashit( $siteurl ) . $path;
|
||||||
|
@ -1045,23 +1067,26 @@ function wp_upload_dir( $time = NULL ) {
|
||||||
$url = trailingslashit( $siteurl ) . UPLOADS;
|
$url = trailingslashit( $siteurl ) . UPLOADS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$subdir = '';
|
||||||
if ( get_option( 'uploads_use_yearmonth_folders' ) ) {
|
if ( get_option( 'uploads_use_yearmonth_folders' ) ) {
|
||||||
// Generate the yearly and monthly dirs
|
// Generate the yearly and monthly dirs
|
||||||
if ( !$time )
|
if ( !$time )
|
||||||
$time = current_time( 'mysql' );
|
$time = current_time( 'mysql' );
|
||||||
$y = substr( $time, 0, 4 );
|
$y = substr( $time, 0, 4 );
|
||||||
$m = substr( $time, 5, 2 );
|
$m = substr( $time, 5, 2 );
|
||||||
$dir = $dir . "/$y/$m";
|
$subdir = "/$y/$m";
|
||||||
$url = $url . "/$y/$m";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$dir .= $subdir;
|
||||||
|
$url .= $subdir;
|
||||||
|
|
||||||
// Make sure we have an uploads dir
|
// Make sure we have an uploads dir
|
||||||
if ( ! wp_mkdir_p( $dir ) ) {
|
if ( ! wp_mkdir_p( $dir ) ) {
|
||||||
$message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $dir );
|
$message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $dir );
|
||||||
return array( 'error' => $message );
|
return array( 'error' => $message );
|
||||||
}
|
}
|
||||||
|
|
||||||
$uploads = array( 'path' => $dir, 'url' => $url, 'error' => false );
|
$uploads = array( 'path' => $dir, 'url' => $url, 'subdir' => $subdir, 'error' => false );
|
||||||
return apply_filters( 'upload_dir', $uploads );
|
return apply_filters( 'upload_dir', $uploads );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue