Я делаю переименование, чтобы я мог переместить папку. Движение прошло успешно, но я продолжаю получать предупреждение:
Предупреждение: переименуйте (site_files / 259, trash / site_files / 259) [function.rename]: такого файла или каталога в /home/oosman/public_html/lib.php нет в строке 79
Это мой код:
$path_parts = pathinfo($file);
$d = $path_parts['dirname'];
$f = $path_parts['basename'];
$trashdir='trash/'.$d;
mkdir2($trashdir);
if(!is_dir($trashdir))
return FALSE;
rename($file, $trashdir.'/'.$f); // this is line 79 where the warning is coming from
Почему я получаю это предупреждение?
К вашему сведению, mkdir2 — это просто моя рекурсивная функция mkdir
function mkdir2($dir, $mode = 0755)
{
if (@is_dir($dir) || @mkdir($dir,$mode)) return TRUE;
if (!mkdir2(dirname($dir),$mode)) return FALSE;
return @mkdir($dir,$mode);
}
Это просто потому, что исходная или целевая папка не существует.
Это все равно удалит предупреждение, но это не лучший способ решить вопрос:
if(file_exists($file) && file_exists($trashdir)){
rename($file, $trashdir.'/'.$f);
}
Чтобы выяснить, в чем действительно заключается проблема, пожалуйста, проверьте следующие вопросы:
1. Есть ли исходный файл (site_files/259
) существовать? Есть ли такое расширение? 259.txt
?
Из вашего журнала, я думаю, абсолютный путь к исходному файлу должен быть /home/oosman/public_html/site_files/259
,
2. Успешно ли вы создали целевую папку? Вы можете увидеть это на диске и получить TRUE
от mkdir2()
?
3. Я настоятельно рекомендую вам использовать абсолютный путь, но не относительный путь, когда вы используете rename()
,
rename('/home/oosman/public_html/site_files/259', '/home/oosman/public_html/trash/site_files/259');
но нет
rename('site_files/259', 'trash/site_files/259');
Может быть, что-то не так с относительным путем?
Обновлено 2014-12-04 12:00:00 (GMT +900):
Поскольку это не что-то упомянутое выше, не могли бы вы записать что-нибудь, чтобы помочь мне уточнить?
Пожалуйста измените
rename($file, $trashdir.'/'.$f);
в
echo "Before moving:\n"echo "Orgin:".file_exists($file)."\n";
echo "Target parent folder:".file_exists($trashdir)."\n";
echo "Target file:".file_exists($trashdir.'/'.$f)."\n";
rename($file, $trashdir.'/'.$f);
echo "After moving:\n"echo "Orgin:".file_exists($file)."\n";
echo "Target parent folder:".file_exists($trashdir)."\n";
echo "Target file:".file_exists($trashdir.'/'.$f)."\n";
Если это выводит:
Before moving:
Origin:1
Target parent folder:1
Target file:0
Warning: rename(site_files/259,trash/site_files/259) [function.rename]: No such file or directory in /home/oosman/public_html/lib.php on line 83
After moving:
Origin:0
Target parent folder:1
Target file:1
ровно один раз, тогда я выхожу. Если это не так, пожалуйста, скажите мне разницу.
Одна возможность — просто скрыть предупреждение:
error_reporting(E_ALL & ~E_WARNING);
rename($file, $trashdir.'/'.$f);
error_reporting(E_ALL & ~E_NOTICE);