基本上,
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
?>
答案 0 :(得分:2)
您是否尝试查看您要重命名的目录是否存在打开的文件?我的猜测是recurseZip
类正在$am_zip
中打开一个文件,而不是正确关闭它。因此,您无法移动/重命名它。您可以通过将2 rename
语句放在彼此之后来确保。
另外,wamp标签表明你在Windows上,所以我猜这不是一个真正的权限问题。否则,您应确保使用chmod
为目录提供写入权限,可能recurseZip
类不保留该目录。
答案 1 :(得分:0)
我找到的解决方案是睡觉(5);在最终重命名之前。