mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-03-18 04:44:53 +08:00
Fix cross-device warning in rename function
This commit is contained in:
parent
d55278714f
commit
e316971764
@ -660,11 +660,19 @@ class FileSystem
|
|||||||
$source = self::convertPath($source);
|
$source = self::convertPath($source);
|
||||||
$dest = self::convertPath($dest);
|
$dest = self::convertPath($dest);
|
||||||
|
|
||||||
// Try rename first (fast, atomic)
|
// Check if source and dest are on the same device to avoid cross-device rename errors
|
||||||
if (@rename($source, $dest)) {
|
$source_stat = @stat($source);
|
||||||
return;
|
$dest_parent = dirname($dest);
|
||||||
|
$dest_stat = @stat($dest_parent);
|
||||||
|
|
||||||
|
// Only use rename if on same device
|
||||||
|
if ($source_stat !== false && $dest_stat !== false && $source_stat['dev'] === $dest_stat['dev']) {
|
||||||
|
if (@rename($source, $dest)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fall back to copy + delete for cross-device moves or if rename failed
|
||||||
if (is_dir($source)) {
|
if (is_dir($source)) {
|
||||||
self::copyDir($source, $dest);
|
self::copyDir($source, $dest);
|
||||||
self::removeDir($source);
|
self::removeDir($source);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user