2014-12-03 64 views
1

我正在做一个重命名,所以我可以移动一个文件夹。此举很成功,但我不断收到警告:php重命名警告,尽管成功

警告:rename(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 

为什么会收到这样的警告?

FYI的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

你可能想用的是'重命名($ path_parts,$ trashdir '/'。$ f);' – 2014-12-03 04:03:31

+1

如果您停止使用'@'来抑制错误,您可能会看到更多的警告,这些警告会告诉您原因。 – 2014-12-03 04:23:31

回答

2

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

这无论如何但不删除该警告的最佳方式来解决这个问题:

if(file_exists($file) && file_exists($trashdir)){ 
    rename($file, $trashdir.'/'.$f); 
} 

为了找出真正的问题是,请检查下面的问题:

1.Does源文件(site_files/259)是否存在?它是否有像259.txt这样的扩展名?

从你的日志中,我猜原始文件的绝对路径应该是/home/oosman/public_html/site_files/259

2.您是否已成功创建目标文件夹?你可以在磁盘上看到它,并从mkdir2()得到TRUE

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月4日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 

恰好只有一次,然后我出。如果没有,请告诉我不同​​之处。

+0

就像我说的,这一举措是成功的。该文件夹的确移动到新的位置。那么为什么会发出警告? – rosewater 2014-12-03 15:40:35

+0

而site_files/259是一个文件夹,而不是文件。我将(成功)将site_files/259移至垃圾箱/ site_files/259。但警告出现。在另一个与此类似的SO问题中,我读到目标文件夹位于不同的分区上。就我而言,我无法确定100%,但我相信它是相同的分区,因为两个文件夹都有相同的根文件夹。 – rosewater 2014-12-03 15:43:22

+0

你确定你只调用过这个函数一次吗?不是像'移动文件已移动'? – kyo 2014-12-04 01:03:29

0

一种可能性是简单地隐藏警告:

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