1

基本上,

rename("./source", "./$new_name"); //succeeds, 
//but subsequent reversal... 
rename("./$new_name", ./source"); fails...

至于我为什么要这样做,希望上下文中的代码能够解释......

<?php
    //$filename="Simplicity.zip"; (Original Folder)
    //$version ="1.0.4b";
    //End result AM_Simplicity1.0.4b.zip
    $src='source';
    //Destination folder for new Zip file.
    $dst='patched';
    $am_zip = "AM_".rtrim($filename,'.zip');
    $filename = $am_zip.$version.".zip";
    rename("./source", "./$am_zip"); //succeeds
    $src = $am_zip;
    $dst = 'patched';
    include "./recurseZip.php";
    $z=new recurseZip();
    $x = $z->compress($src,$dst,$filename);
    // AND... so that ./source can be emptied on demand later.
    rename("./$am_zip","./source"); //fails... Permission Denied
?>
4

2 回答 2

2

您是否尝试查看要重命名的目录是否有打开的文件?我的猜测是recurseZip该类正在打开一个文件$am_zip并且没有正确关闭它。因此,您不能移动/重命名它。rename您可以通过将 2 个语句放在一起来确保。

此外,wamp 标签表明您在 Windows 上,所以我想这不是真正的权限问题。否则,您应该确保您使用chmod授予目录写权限,也许recurseZip该类没有保留它。

于 2012-11-13T15:54:29.017 回答
0

我找到的解决方案是 sleep(5); 在最终重命名之前。

于 2012-11-13T18:15:09.200 回答