递归 mkdir() 和 chmod()?
使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
刚刚在 gentoo linux 上使用 PHP 5.2.12 进行了测试:它们都有相同的权限。
Just tested on gentoo linux with PHP 5.2.12: They all have the same permissions.
负责 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 andVCWD_MKDIR(buf, (mode_t)mode))
for all subdirectories. php_mkdir() does some safe mode checking and then also callsVCWD_MKDIR
So yes, the mode parameter is used for all directories created by mkdir(p, x, true).