递归 mkdir() 和 chmod()?

发布于 2024-08-17 17:26:58 字数 533 浏览 5 评论 0原文

使用 mkdir() 将递归标志设置为 true 时,所有创建的目录都会获得指定的 chmod 还是仅获得最后一个?例如:

mkdir('/doesnotExist1/doesnotExist2/doesnotExist3/', 0755, true);

新创建的目录 /doesnotExist1//doesnotExist1/doesnotExist2/ 是否也会获得与 /doesnotExist1/doesnotExist2/doesnotExist3/ 相同的 chmod > = 0755?

如果没有,有没有办法强制上述行为

我会自己测试一下,但我无法使用 *nix box ATM。

When using mkdir() with the recursive flag set to true do all the created directories get the specified chmod or just the last one? For example:

mkdir('/doesnotExist1/doesnotExist2/doesnotExist3/', 0755, true);

Will the newly created directories /doesnotExist1/ and /doesnotExist1/doesnotExist2/ also get the same chmod as /doesnotExist1/doesnotExist2/doesnotExist3/ = 0755?

If not, is there any way to force the above behavior?

I would test this myself, but I don't have access to a *nix box ATM.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半衾梦 2024-08-24 17:26:58

刚刚在 gentoo linux 上使用 PHP 5.2.12 进行了测试:它们都有相同的权限。

soulmerge@shark-g:~$ php -a
Interactive shell

php > mkdir('asd/def/ghi', 0700, 1);
php > ^C
soulmerge@shark-g:~$ ls -hal asd
total 12K
drwx------  3 soulmerge soulmerge 4.0K 2010-01-12 10:32 .
drwxr-xr-x 79 soulmerge soulmerge 4.0K 2010-01-12 10:32 ..
drwx------  3 soulmerge soulmerge 4.0K 2010-01-12 10:32 def

Just tested on gentoo linux with PHP 5.2.12: They all have the same permissions.

soulmerge@shark-g:~$ php -a
Interactive shell

php > mkdir('asd/def/ghi', 0700, 1);
php > ^C
soulmerge@shark-g:~$ ls -hal asd
total 12K
drwx------  3 soulmerge soulmerge 4.0K 2010-01-12 10:32 .
drwxr-xr-x 79 soulmerge soulmerge 4.0K 2010-01-12 10:32 ..
drwx------  3 soulmerge soulmerge 4.0K 2010-01-12 10:32 def
北笙凉宸 2024-08-24 17:26:58

负责 mkdir('localfilesystem', x, true) 的 C 函数是 main/streams/plain_wrapper.c 中的 php_plain_files_mkdir() 。它为它应该创建的“第一个”目录调用 php_mkdir(dir, mode TSRMLS_CC); ,为所有子目录调用 VCWD_MKDIR(buf, (mode_t)mode)) 。 php_mkdir() 进行一些安全模式检查,然后还调用 VCWD_MKDIR
所以是的,mode 参数用于 mkdir(p, x, true) 创建的所有目录。

The C function responsible for mkdir('localfilesystem', x, true) is php_plain_files_mkdir() in main/streams/plain_wrapper.c. And it calls php_mkdir(dir, mode TSRMLS_CC); for the "first" directory it is supposed to create and VCWD_MKDIR(buf, (mode_t)mode)) for all subdirectories. php_mkdir() does some safe mode checking and then also calls VCWD_MKDIR
So yes, the mode parameter is used for all directories created by mkdir(p, x, true).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文