10

我运行以下代码:

mkdir('mnt/1',0777,true);
mkdir('mnt/a',0777);

目录“a”已创建,而目录“1”未创建,页面打印警告。

Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 3

我对正在运行的用户 apache 的目录 mnt 拥有完全权限:

drwxr-xr-x 1 bitrix bitrix   4096 Nov 28 10:10 mnt

PHP 版本 - PHP 5.3.3。阿帕奇版本 2.2.15。

任何想法,为什么 mkdir 在递归选项设置为 true 时失败?

更新! 好吧,我清除了文件夹,制作了以下 php-script 并再次运行它:

<?php
        error_reporting(E_ALL);
        mkdir('mnt/1',0777,true);
        mkdir('mnt/2/',0777,true);
        mkdir('./mnt/3',0777,true);
        mkdir('./mnt/4/',0777,true);

        mkdir('mnt/a',0777);
        mkdir('mnt/b/',0777);
        mkdir('./mnt/c',0777);
        mkdir('./mnt/d/',0777);
?>

这是输出:

Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 3 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 4 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 5 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 6

这是脚本执行后文件夹 mnt 的内容:

drwxr-xr-x  1 bitrix bitrix  4096 Nov 28  2012 .
drwxrwx--- 11 bitrix bitrix 12288 Nov 28 11:10 ..
drwxr-xr-x  1 bitrix bitrix     0 Nov 28  2012 a
drwxr-xr-x  1 bitrix bitrix     0 Nov 28  2012 b
drwxr-xr-x  1 bitrix bitrix     0 Nov 28  2012 c
drwxr-xr-x  1 bitrix bitrix     0 Nov 28  2012 d

我还尝试了递归 mkdir 的绝对路径 - 仍然没有运气,而非递归 mkdir 无论路径如何设置都可以正常工作。递归 mkdir 有什么问题?我还是没有想法。。

更新!进一步调查显示,发生这种情况是因为 mnt 是一个文件夹,通过命令挂载

mount -t cifs -o username=***user***,password=***password***,uid=bitrix,gid=bitrix,iocharset=utf8,codepage=866 //192.168.1.6/folder /home/bitrix/www/mnt

在所有其他目录中递归 mkdir 工作正常,而在该目录中只有非递归 mkdir 工作!

更新!正如femtoRgon假设的 mkdir,当从文件夹中的脚本运行时mnt,递归和非递归都可以正常工作。但是我仍然无法弄清楚,为什么从 /home/bitrix/www 运行时会失败?我什至尝试使用选项安装file_mode=0775,dir_mode=0775- 没有运气。我的操作系统 = CentOS 6.3,如果重要的话..

4

3 回答 3

2

After some googling, I found the answer on php.net. It is all about serverino mount option. When I mounted folder with noserverino all problems were gone. Anyway thanks guys for trying to help!

于 2012-11-29T07:14:13.930 回答
0

您可以尝试将斜杠字符附加到您的第一个参数。

mkdir('./mnt/1/',0777,true);
于 2012-11-28T14:25:02.203 回答
0

这是创建目录的正确方法:

mkdir('/test1/test2', 0777, true);

mkdir("test1/test2",0777,true);

所以你的错误可能出现在一些缺失的行上。不是你创建目录的方式。

有关更多详细信息,您可以在此处查看:http: //php.net/manual/en/function.mkdir.php

于 2012-11-28T14:52:58.997 回答