gpt4 book ai didi

PHP mkdir 在 rmdir 后不起作用

转载 作者:行者123 更新时间:2023-12-04 05:39:03 25 4
gpt4 key购买 nike

我有一段代码用于测试目录是否存在,如果存在则删除它,并在其上创建一个新目录。它应该相当简单。

if(is_dir($directory)){
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory,RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach($files as $fileinfo){
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
$todo($fileinfo->getRealPath());
}
rmdir($directory);
//var_dump(is_dir($directory));
}

clearstatcache();
mkdir($directory,0744);

如果该目录尚不存在,则 mkdir()工作得很好。但是如果目录确实存在, rmdir()循环完成了它的工作,但 PHP 抛出了一个错误:
PHP Error[2]: mkdir(): Permission Denied

评论 var_dump()行显示 PHP 仍然认为 $directory即使在 rmdir() 之后也是一个目录打电话。所以我使用 clearstatcache()更新它,但它仍然不会检测到该目录已被删除。当我在文件系统中查找时,该目录实际上已被删除。

如果我再次运行脚本(当目录消失时),它工作得很好。

谁能弄清楚如何解决这个错误?如果它有所作为,我会在我的 Win7/XAMPP 开发环境中将它作为 PHP 命令行脚本运行。

编辑:

感谢 Wee Kiat 和 Phillip 的回答。解决方案是使用 unset($files)之前 rmdir()关闭递归迭代器,它仍然保持 $directory打开并引起 mkdir()呛。请参阅下面的代码。

最佳答案

看起来 $files 是导致问题的变量,您需要做的是在 foreach 循环之后取消设置 $files 并且您将能够使用 mkdir()。

if(is_dir($directory)){
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory,RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach($files as $fileinfo){
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
$todo($fileinfo->getRealPath());
}

unset($files);

rmdir($directory);
//var_dump(is_dir($directory));
}
mkdir($directory,0744);

但我不知道为什么 $files 会导致这个问题。有什么想法吗?

关于PHP mkdir 在 rmdir 后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11513488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com