Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php重命名警告(尽管已成功)_Php_Rename - Fatal编程技术网

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']; $

我正在进行重命名,以便可以移动文件夹。这一举措是成功的,但我一直收到一个警告:

警告:重命名(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);
}

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

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

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