没有不值得去解决的问题,也没有不值得去学习的技术!

在 PHP 7.4 中报错:mkdir(): File exists 的解决( 错误控制运算符:@ )

在 PHP 7.4 中报错:mkdir(): File exists

作者:

在

, ,

1、在 PHP 7.4 中报错:mkdir(): File exists。如图1

在 PHP 7.4 中报错:mkdir(): File exists
图1
PHP

if (!file_exists($prefix.DIRECTORY_SEPARATOR.$currentFolder)) {
	mkdir($currentFolder, 0755);
	chmod($currentFolder, 0755);
}

2、但是,在代码实现中,是先判断目录不存在才执行 mkdir() 的。可是在执行时,目录又已经存在了。应该是请求并发导致的问题。

3、在本地环境复现此报错

PHP

$currentFolder = 'E:/wwwroot/currentFolder';
mkdir($currentFolder, 0755);
chmod($currentFolder, 0755);

4、第一次运行时,没有报错,目录:E:/wwwroot/currentFolder 被成功创建。如图2

第一次运行时,没有报错,目录:E:/wwwroot/currentFolder 被成功创建
图2

5、第二次运行时,报错:Warning: mkdir(): File exists in E:\wwwroot\phpinfo.php on line 6。如图3

第二次运行时,报错:Warning: mkdir(): File exists in E:\wwwroot\phpinfo.php on line 6
图3

6、调整代码实现,使用 错误控制运算符:@ 解决。在本地环境测试代码运行情况。

PHP

$currentFolder = 'E:/wwwroot/currentFolder';
@mkdir($currentFolder, 0755);
chmod($currentFolder, 0755);

7、第三次运行时,没有报错。

8、删除掉目录:E:/wwwroot/currentFolder,再次运行。没有报错,目录:E:/wwwroot/currentFolder 被成功创建。如图4

删除掉目录:E:/wwwroot/currentFolder,再次运行。没有报错,目录:E:/wwwroot/currentFolder 被成功创建
图4

9、最终代码实现如下

PHP

if (!file_exists($prefix.DIRECTORY_SEPARATOR.$currentFolder)) {
	@mkdir($currentFolder, 0755);
	chmod($currentFolder, 0755);
}

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系