У меня следующая странная проблема:
Я создаю подпапку в папке Linux TMP с помощью PHP
mkdir(sys_get_temp_dir().DIRECTORY_SEPARATOR.'subfolder');
Затем я пытаюсь переместить эту папку с помощью PHP rename () func. Я пытаюсь сделать это так:
rename('/tmp/subfolder', '/other/folder/name');
Но это возвращает мне странное предупреждение:
Предупреждение: rename (): первый аргумент функции copy () не может быть каталогом
Это как-то связано с правами доступа к этим папкам? Есть идеи?
Твой /tmp
на другой файловой системе от вашего /other
? Это было бы хорошей практикой, если вы хотите отделить ваше временное хранилище файлов, которое может быть заполнено мусором, например. /var
(который может заполниться журналами!)
Если это так, то в PHP есть основная ошибка, которая предотвращает rename()
от надежной работы через файловые системы:
https://bugs.php.net/bug.php?id=54097
Обходной путь, указанный здесь, должен использовать exec("mv "...)
но более надежно вы можете сделать:
if (@rename($from, $to)) {
return;
}
exec("mv " . escapeshellarg($from) . " " . escapeshellarg($to));
Если вы инкапсулируете это в функцию или метод, вы можете вызвать его вместо rename()
всякий раз, когда вам это нужно.
Других решений пока нет …