环境:Ubuntu14.04+MySQL5+PHP5+Apache2
使用php的mkdir函数创建一个文件夹,但是返回了false,php文件此时存放在/var/www/html
文件夹下,此时该文件夹的权限为只允许root用户进行写操作,即
root@ubuntu:/var/www# ls -l
total 4
drwxr-xr-x 5 root root 4096 Aug 21 19:50 html
上一篇博客提到过,可以使用chmod来进行权限的赋予,因此,我们首先赋予g(group)用户权限,即chmod g+w html
,g就是你登录进Ubuntu时输入密码的那个账户,赋予其写权限后,你就可以在shell中运行mkdir了(无需使用sudo)。
但是,此时如果你想使用在html文件夹下的php文件来mkdir的话,会失败,必须赋予o(other)写的权限,即chmod o+w html
,此时运行,php中的mkdir()才会返回1。由此可见,运行php中的mkdir()的用户是other。
猜测:因为此时是通过浏览器输入ip然后调用这个php文件,而这些命令都是通过Apache来接收的,所以应该是Apache来执行的php文件,属于o的权限。
使用命令行ps -ef|grep apache
,可以看到Apache的运行用户为www-data
查看/etc/passwd
目录,我们可以看到各个用户,其中就包括了www-data。
使用chown和chgrp来改变文件的拥有者(owner)和用户组(group)。
当我使用ls -l
查看/var/www/html
内的文件时,我们会发现,一些php文件和html文件是不能被g和o执行和写的,但是我们同样能运行,因为我们只是将其读,然后放进php解释器。