php重命名成功后仍有警告

pbwdgjma  于 2023-03-21  发布在  PHP
关注(0)|答案(3)|浏览(98)

我正在重命名文件夹,以便移动文件夹。移动成功,但我不断收到警告:
警告:rename(site_files/259,trash/site_files/259)[function.rename]:在/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

为什么我会收到这个警告?
仅供参考,mkdir 2只是我的递归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);
}
kd3sttzy

kd3sttzy1#

这只是因为源文件夹或目标文件夹不存在。
这将删除警告,但不是解决问题的最佳方法:

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.你成功创建目标文件夹了吗?你能在磁盘上看到它并从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-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

如果只有一次,那么我就出局了。如果没有,请告诉我有什么不同。

kulphzqa

kulphzqa2#

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

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

juud5qan3#

我有同样的问题,发出一个‘警告‘的重命名功能,而转移是做得很好。
这个问题来自于一个卷到另一个卷的传输。以及源文件和目标文件之间的不同权限。
此错误在PHP中引用:Bug
实际上,rename()函数执行以下操作:
复制、chmod、chown和取消链接
在我的例子中,我认为chown()操作失败,因此发出了“警告”。为了克服这个问题,并且不简单地用error_reporting(E_ALL & ~E_WARNING)隐藏所有警告,我实现了以下代码:

// If Source File Present and Accessible
if(@is_file($sourceFilePath))
{
    // If no error during transfer (we omit the warning with @)
    if(@rename($sourceFilePath,$destinationFilePath))
    {
        // If the transfer was really successful (and the file is accessible)
        if(@is_file($destinationFilePath))
        {
          echo "OK";
        }
        else echo "Error : File Not Really Transfered";
    }
    else echo "Error : File Not Transfered";
}
else echo "Error : Source File Not Present";

希望这个答案能帮到你

相关问题