php中mkdir()函数的权限问题(转)

问题描述:

使用以下php代码创建了一个目录,期望目录的权限是0777,实际结果是0755

[php] view plaincopy

  1. mkdir(‘./aa/‘,0777);

分析与测试结果:

1.mkdir()函数指定的目录权限只能小于等于系统umask设定的默认权限。

如linux默认的umask一般0022, 即创建目录的默认权限是0755, 所以这时php  mkdir(‘./aa/‘,0777) 得到目录的权限是0755.

[plain] view plaincopy

  1. [email protected]:~/Desktop/dd/aa$ umask
  2. 0022
  3. [email protected]:~/Desktop/dd/aa$ php -r "mkdir(‘./xw/‘,0777);"
  4. [email protected]:~/Desktop/dd/aa$ php -r "mkdir(‘./xw1/‘,0755);"
  5. [email protected]:~/Desktop/dd/aa$ php -r "mkdir(‘./xw2/‘,0747);"
  6. [email protected]:~/Desktop/dd/aa$ ll
  7. 总用量 20
  8. drwxrwxrwx 5 xw xw 4096 2012-06-01 11:58 ./
  9. drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
  10. drwxr-xr-x 2 xw xw 4096 2012-06-01 11:57 xw/
  11. drwxr-xr-x 2 xw xw 4096 2012-06-01 11:58 xw1/
  12. drwxr--r-x 2 xw xw 4096 2012-06-01 11:58 xw2/

把系统默认权限改为777,mkdir()可以指定更大权限了

[html] view plaincopy

  1. [email protected]:~/Desktop/dd/aa$ umask 000
  2. [email protected]:~/Desktop/dd/aa$ php -r "mkdir(‘./xw2/‘,0777);"
  3. [email protected]:~/Desktop/dd/aa$ ll
  4. 总用量 12
  5. drwxrwxrwx 3 xw xw 4096 2012-06-01 12:08 ./
  6. drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
  7. drwxrwxrwx 2 xw xw 4096 2012-06-01 12:08 xw2/

2.chmod()函数不受系统umask影响,可以设置比系统默认权限大的权限。

[plain] view plaincopy

  1. [email protected]:~/Desktop/dd/aa$ umask
  2. 0022
  3. [email protected]:~/Desktop/dd/aa$ php -r "mkdir(‘./xw1/‘,0777);"
  4. [email protected]:~/Desktop/dd/aa$ php -r "mkdir(‘./xw2/‘);"
  5. [email protected]:~/Desktop/dd/aa$ php -r "mkdir(‘./xw3/‘);chmod(‘./xw3/‘,0777);"
  6. [email protected]:~/Desktop/dd/aa$ ll
  7. 总用量 20
  8. drwxrwxrwx 5 xw xw 4096 2012-06-01 12:12 ./
  9. drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
  10. drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw1/
  11. drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw2/
  12. drwxrwxrwx 2 xw xw 4096 2012-06-01 12:12 xw3/

3.系统的mkdir命令可以设置大于默认值的权限。

[plain] view plaincopy

  1. [email protected]:~/Desktop/dd/aa$ umask
  2. 0022
  3. [email protected]:~/Desktop/dd/aa$ mkdir -m0777 xw
  4. [email protected]:~/Desktop/dd/aa$ ll
  5. 总用量 12
  6. drwxrwxrwx 3 xw xw 4096 2012-06-01 12:18 ./
  7. drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
  8. drwxrwxrwx 2 xw xw 4096 2012-06-01 12:18 xw/

总结:

php若要创建一个有读写权限的目录,最好使用以下代码,不要直接使用mkdir函数指定权限,以避免系统umask的影响

[php] view plaincopy

  1. mkdir(‘./xw/‘);
  2. chmod(‘./xw/‘,0777);

参考文章:

LINUX UMASK详解

PHP用mkdir()新建立目录无写的权限的问题

原文:http://blog.csdn.net/tsxw24/article/details/7622832

时间: 2024-08-29 12:55:09

php中mkdir()函数的权限问题(转)的相关文章

关于C++类中访问权限的若干疑问(虚函数访问权限)

下面这样一个程序:(以下程序都是在VS2010下实现) 1: class Base 2: { 3: public: 4: virtual void func() 5: { 6: cout<<"Base virtual func"<<endl; 7: } 8: }; 9: 10: class Derived: public Base 11: { 12: private: 13: virtual void func() 14: { 15: cout<<&

《APUE》中的函数整理

第1章 unix基础知识 1. char *strerror(int errnum) 该函数将errnum(就是errno值)映射为一个出错信息字符串,返回该字符串指针.声明在string.h文件中. 2.void perror(const char *s) 该函数基于当前的errno值,在标准出错文件中输出一条出错消息,然后返回.声明在stdio.h文件中.它首先输出由s指向的字符串,然后是一个冒号,一个空格,接着是errno值对应的出错信息,最后是一个换行符. 第2章 UNIX标准化及实现

PHP mkdir()无写权限的问题解决方法

这篇文章主要介绍了PHP mkdir()无写权限的问题解决方法,对umask做了详细解释以及mkdir()后没写权限的解决方法,需要的朋友可以参考下 使用mkdir创建文件夹时,发现这个函数有两个参数,第二个参数是为新创建的文件夹指定权限. 但是如果直接用mkdir('文件地址', 0777);时 发现新文件夹的权限并不是777,一般情况下会是022. 因为mkdir在给文件夹制定权限时,会跟当前登录操作系统用户的umask(用户缺省权限属 性)值进行位“与”,得到的值才是最终权限值. umas

SQL SERVER2008 存储过程、表、视图、函数的权限

EXEC sp_addrolemember N'db_owner', N'db'----将db 设置为 db_owner 角色中的一员 EXEC sp_droprolemember N'db_owner', N'db'----将db 从 db_owner 角色 去除 ALTER AUTHORIZATION ON SCHEMA::[db_datareader] TO dbs  ----给db 赋予 拥有 db_datareader 架构 ALTER AUTHORIZATION ON SCHEMA:

mysql中find_in_set()函数的使用

首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我们如何用sql查找所有type中有4的图文类型的文章呢?? 这就要我们的 find_in_set 出马的时候到了.以下为引用的内容: select * from article where FIND_IN_SET('4',type) ---------------------------------

python中定义函数和参数的传递问题

作者:達聞西链接:https://zhuanlan.zhihu.com/p/24162430来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 5.2.4 函数.生成器和类 还是从几个例子看起: def say_hello(): print('Hello!') def greetings(x='Good morning!'): print(x) say_hello() # Hello! greetings() # Good morning! greetings("Wh

shell从函数文件中调用函数

碰到一个shell中函数调用的小问题,记录一下. shell中函数有三种调用方式,一种是在文件前面定义函数,然后在下面直接调用:一种是通过载入shell,在shell中直接调用:第三种是将函数写入文件,然后在其他shell中调用函数. 这里写一下关于第三种方法的例子: is_it_a_directory() { if [ $# -lt 1 ];then echo "is_it_a_directory:I need an argument" return 1 fi _DIRECTORY_

关于C++与Java中虚函数问题的读书笔记

之前一直用C++编程,对虚函数还是一些较为肤浅的理解.可近期由于某些原因搞了下Java,发现有些知识点不熟,于是站在先驱巨人的肩上谈谈C++与Java中虚函数问题. Java中的虚函数 以下是段别人的代码,输入结果竟是Base,这让一直以来用C/C++的我有些莫不着头脑,不是Java里对象是引用吗?C/C++中通过指向基类的指针或引用来指向派生类,那么对于虚函数来说通过基类指针使用的是指向的派生类.但在Java中没有keyword标明虚函数,此时就不是非常明确究竟调用的谁. class base

C++虚函数访问权限的改变

如果在基类中虚函数的访问权限是一种情况,那么派生类在继承基类的时候,派生类可以重新定义基类虚函数的访问权限,经过实例验证是正确的. 从这里也说明了函数的覆盖或者说重定义跟前面的访问权限修饰没多大关系 //Base.h #pragma once #include <iostream> using namespace std; class Base { public: Base(void){} ~Base(void){} virtual void fun(){cout<<"T