WP_Filesystem: Use the FTP_* path override constants during upgrades for prefixed paths, ie. use FTP_BASE for ABSPATH/sub-dir as well as just for ABSPATH/. Props vericgar for initial patch. See #14401
Built from https://develop.svn.wordpress.org/trunk@25057 git-svn-id: http://core.svn.wordpress.org/trunk@25043 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
ad980384f2
commit
1b9ab9f66f
|
@ -147,11 +147,39 @@ class WP_Filesystem_Base {
|
|||
*/
|
||||
function find_folder($folder) {
|
||||
|
||||
if ( strpos($this->method, 'ftp') !== false ) {
|
||||
$constant_overrides = array( 'FTP_BASE' => ABSPATH, 'FTP_CONTENT_DIR' => WP_CONTENT_DIR, 'FTP_PLUGIN_DIR' => WP_PLUGIN_DIR, 'FTP_LANG_DIR' => WP_LANG_DIR );
|
||||
foreach ( $constant_overrides as $constant => $dir )
|
||||
if ( defined($constant) && $folder === $dir )
|
||||
return trailingslashit(constant($constant));
|
||||
if ( isset( $this->cache[ $folder ] ) )
|
||||
return $this->cache[ $folder ];
|
||||
|
||||
if ( stripos($this->method, 'ftp') !== false ) {
|
||||
$constant_overrides = array(
|
||||
'FTP_BASE' => ABSPATH,
|
||||
'FTP_CONTENT_DIR' => WP_CONTENT_DIR,
|
||||
'FTP_PLUGIN_DIR' => WP_PLUGIN_DIR,
|
||||
'FTP_LANG_DIR' => WP_LANG_DIR
|
||||
);
|
||||
|
||||
// Direct matches ( folder = CONSTANT/ )
|
||||
foreach ( $constant_overrides as $constant => $dir ) {
|
||||
if ( ! defined( $constant ) )
|
||||
continue;
|
||||
if ( $folder === $dir )
|
||||
return trailingslashit( constant( $constant ) );
|
||||
}
|
||||
|
||||
// Prefix Matches ( folder = CONSTANT/subdir )
|
||||
foreach ( $constant_overrides as $constant => $dir ) {
|
||||
if ( ! defined( $constant ) )
|
||||
continue;
|
||||
if ( 0 === stripos( $folder, $dir ) ) { // $folder starts with $dir
|
||||
$potential_folder = preg_replace( '#^' . preg_quote( $dir, '#' ) . '/#i', trailingslashit( constant( $constant ) ), $folder );
|
||||
$potential_folder = trailingslashit( $potential_folder );
|
||||
|
||||
if ( $this->is_dir( $potential_folder ) ) {
|
||||
$this->cache[ $folder ] = $potential_folder;
|
||||
return $potential_folder;
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif ( 'direct' == $this->method ) {
|
||||
$folder = str_replace('\\', '/', $folder); //Windows path sanitisation
|
||||
return trailingslashit($folder);
|
||||
|
|
Loading…
Reference in New Issue