mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-06-28 14:20:15 +00:00
Filesystem API: Add directory support to WP_Filesystem_Direct::move().
Introduces: - New function: `wp_opcache_invalidate_directory()`, to recursively call `wp_opcache_invalidate()` after overwriting .php files. - New function: `move_dir()`, similar to `copy_dir()` that uses `WP_Filesystem::move()` followed by `wp_opcache_invalidate_directory()`, and has a fallback to `copy_dir()`. Props: costdev, afragen, peterwilsoncc, sergeybiryukov, ironprogrammer, flixos90, bronsonquick, mukesh27, azaozz. Fixes #57375. git-svn-id: https://develop.svn.wordpress.org/trunk@55204 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -316,7 +316,14 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves a file.
|
||||
* Moves a file or directory.
|
||||
*
|
||||
* After moving files or directories, OPcache will need to be invalidated.
|
||||
*
|
||||
* If moving a directory fails, `copy_dir()` can be used for a recursive copy.
|
||||
*
|
||||
* Use `move_dir()` for moving directories with OPcache invalidation and a
|
||||
* fallback to `copy_dir()`.
|
||||
*
|
||||
* @since 2.5.0
|
||||
*
|
||||
@@ -331,12 +338,18 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( $overwrite && $this->exists( $destination ) && ! $this->delete( $destination, true ) ) {
|
||||
// Can't overwrite if the destination couldn't be deleted.
|
||||
return false;
|
||||
}
|
||||
|
||||
// Try using rename first. if that fails (for example, source is read only) try copy.
|
||||
if ( @rename( $source, $destination ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( $this->copy( $source, $destination, $overwrite ) && $this->exists( $destination ) ) {
|
||||
// Backward compatibility: Only fall back to `::copy()` for single files.
|
||||
if ( $this->is_file( $source ) && $this->copy( $source, $destination, $overwrite ) && $this->exists( $destination ) ) {
|
||||
$this->delete( $source );
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user