The Note You're Voting On
mike ¶3 years ago
Important note - rename() does NOT work for *directories* across filesystems or devices. Only *files*
You will get two warnings:
"PHP Warning: rename(): The first argument to copy() function cannot be a directory in <whatever> on line <whatever>"
"PHP Warning: rename(t2,/var/run/test/t2): Invalid cross-device link in <whatever> on line <whatever>"
The copy() mentioned I assume is C's copy() and not PHP's copy() function. There is an associated bug in the Ubuntu bug system for this as well, that was escalated to bugs.php.net:
https://bugs.php.net/bug.php?id=54097
The only workarounds right now I believe is using PHP copy($source, $dest) and then on success, PHP unlink($source), or doing system("mv $source $dest") which is hokey, and should be surrounded by quotes for paths with spaces or other shell metacharacters, and possibly escaped for security.