PHP переименовать предупреждение, несмотря на то, что он был успешным

Я делаю переименование, чтобы я мог переместить папку. Движение прошло успешно, но я продолжаю получать предупреждение:

Предупреждение: переименуйте (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);
}

1

Решение

Это просто потому, что исходная или целевая папка не существует.

Это все равно удалит предупреждение, но это не лучший способ решить вопрос:

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

ровно один раз, тогда я выхожу. Если это не так, пожалуйста, скажите мне разницу.

2

Другие решения

Одна возможность — просто скрыть предупреждение:

error_reporting(E_ALL & ~E_WARNING);
rename($file, $trashdir.'/'.$f);
error_reporting(E_ALL & ~E_NOTICE);
0

По вопросам рекламы [email protected]