mkdir 之 mode

题记: 学习要细心

曾经,在php中要创建一个权限为 0777的目录:

应该问题不大,写完就交差了,测也不测;后来发现,创建的目录是 0755的,再检查一遍代码,确认是0777,不可能错的!可能是谁给修改成0755了吧?然后就做别的去了…

终于有一天,同事遇到了同样的问题,叫我过去看看,猜测可能和umask有关系,修改umask=0000(零零零零)后,终于创建出了0777的目录了,果然和umask有关系,有点儿坑die吧?

难道是PHP中添加了这种奇怪的逻辑? (写C的同学不要笑我,俺没写过C)

查看PHP源代码,发现PHP的mkdir直接调用的是glibc中的mkdir,没有做任何特殊处理,那么?

man 2 mkdir

有如下描述:

问题真相大白了。

我们知道命令行的mkdir -m 0777 能创建出来777的目录,难道命令行的mkdir用的不是glibc的mkdir?不太可能,参看: mkdir –help

很有可能mkdir在创建目录之后,chmod修改了目录的权限

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据