尽管成功,php重命名警告

时间:2014-12-03 04:00:01

标签: php rename

我正在重命名,所以我可以移动文件夹。此举是成功的,但我不断收到警告:

警告:重命名(site_files / 259,trash / site_files / 259)[function.rename]:第79行/home/oosman/public_html/lib.php中没有此类文件或目录

这是我的代码:

$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);
}

2 个答案:

答案 0 :(得分:2)

这只是因为源文件夹或目标文件夹不存在。

这将取消警告,但不是解决问题的最佳方法:

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

只有一次,然后我出去了。如果没有,请告诉我区别。

答案 1 :(得分:0)

一种可能性就是隐藏警告:

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