php重命名警告(尽管已成功)
我正在进行重命名,以便可以移动文件夹。这一举措是成功的,但我一直收到一个警告: 警告:重命名(site_files/259,trash/site_files/259)[function.rename]:第79行的/home/oosman/public_html/lib.php中没有这样的文件或目录 这是我的代码:php重命名警告(尽管已成功),php,rename,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']; $
$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\u files/259
)是否存在?它是否有像259.txt
这样的扩展名
从您的日志中,我猜原始文件的绝对路径应该是/home/oosman/public\u html/site\u files/259
2.您是否已成功创建目标文件夹?您能在磁盘上看到它并从mkdir2()
获取TRUE
吗
3.我强烈建议您在使用rename()
时使用绝对路径,而不是相对路径
但不是
rename('site_files/259', 'trash/site_files/259');
也许相对路径有问题
更新日期2014-12-04 12:00:00(GMT+900):
既然不是上面提到的任何事情,你能帮我记录一些东西来澄清吗
请换
rename($file, $trashdir.'/'.$f);
到
如果输出:
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);
您可能打算使用
rename($path\u parts,$trashdir./'.$f)
如果您停止使用@
抑制错误,您可能会看到更多警告,告诉您原因。正如我所说,移动成功。文件夹确实会移动到新位置。那么为什么它会给出警告呢?而site_files/259是一个文件夹,而不是一个文件。我正在将站点_文件/259(成功)移动到垃圾桶/site_文件/259。但是警告出现了。在另一个与此类似的问题中,我看到目标文件夹位于不同的分区上。在我的例子中,我不能确定它是100%,但我相信它是同一个分区,因为两个文件夹都有相同的根文件夹。你确定你只调用过一次这个函数吗?不是“移动已经移动的文件”吗?是的,我也通过添加日志来检查。重命名只调用一次。-移动前:原点:目标父文件夹:1目标文件:1移动后:原点:目标父文件夹:1目标文件:1
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);