随机出现的“拒绝许可”;在PHP中mkdir (windows)


Randomly arising "Permission denied" in php mkdir (windows)

我正在解决一个问题。我将示例简化为可以作为独立应用程序运行的脚本:

<?php
if(file_exists("x")){
    print "<div>Deleting dir</dir>";
    rmdir("x");
} else {
    print "<div>Not exists</dir>";
}
clearstatcache();
mkdir("x");

如果我多次调用它(在浏览器中F5),有时会出现这个错误:

Deleting dir
Warning: mkdir(): Permission denied in F:'EclipseWorkspaces'Ramses'www'deploy'stripped_example.php on line 9

10-20次它工作正常,下次出现此错误。我谷歌了更多的用户有这个问题,但没有解决方案。
https://github.com/getgrav/grav/issues/467
我的示例在cwd中创建目录,任何人都可以完全控制该目录。此外,mkdir $mode参数在windows中被忽略。出现错误后,"x"目录确实不存在,在下一次尝试(F5)时,它总是被创建而没有错误。我希望后来添加"clearstatcache()"会有所帮助,但没有。

在我的完整应用程序中,我使用完整的文件路径。删除的目录不是空的,我必须先清理它。成功删除后,错误几乎总是发生。

我的系统是Windows 7, PHP 7.0.5, Apache 2.4

Windows不允许你删除正在访问的文件

检查你的防病毒程序或其他进程是否正在打开文件夹。

尝试对现有代码进行额外检查:

<?php
if(is_dir("x")){
    print "<div>Deleting dir</dir>";
    rmdir("x");
} else {
    print "<div>Not exists</dir>";
}
clearstatcache();
if (!is_dir("x")) {
   mkdir("x");
}

在Windows 10, Xampp和PHP 7中有同样的问题。问题是卡巴斯基网络安全软件扫描并阻止了该目录。禁用KIS mkdir对我来说总是有效的。如果您不能禁用安全软件,您可以尝试rename,而不是直接重新创建。

$time = time();
mkdir($path . $time);
rename($path . $time, $path);

delete space name folder with Function Trim in php