今天我遇到了一种奇怪的行为,我不明白。
我正在尝试使用PHP 7.0脚本使用mkdir()
函数在本地磁盘上创建目录,但它产生"permission denied"错误。
根据我的经验(虽然很少),这总是意味着执行PHP脚本的用户没有被授权写入目录。这对我来说很有意义,在开发web应用程序时通常不是问题。当使用Apache时,默认的PHP用户是www-data
,我没有遇到任何问题。
在这种情况下,虽然我使用的是Zend Framework 2,特别是我使用它的控制台路由,所以我不会通过Apache(纠正我,如果我错了)。我调用我的脚本为:
php index.php route name [--options]
与我的用户(这是不是根,而是sudoer)。如果我输出PHP的get_current_user()
函数的结果,问题就开始了,因为我得到'root'而不是我期望的用户名。不仅如此,当在以下目录中使用mkdir()
时,我得到'permission denied'
drwxr-xr-x 2 www-data www-data 4096 Aug 19 21:21 logs
我从中理解的是,我可能不是PHP所建议的根用户。如果我然后用'sudo'在前面运行脚本,我就能够创建所需的文件夹,但权限与我在mkdir()
函数中指定的权限不匹配。如果我写mkdir('path', 0777)
,我得到:
drwxr-xr-x 3 root root
这个我不明白。所以,如果有人能帮我找出我做错了什么,我会非常感激。请记住,我正在使用Zend Framework 2的事实可能会影响这种行为(尽管我并不热衷于这样想)。
提前感谢您的宝贵时间。
编辑。
我刚刚意识到我没有告诉你我的最终目标是什么,所以我现在要把事情放在上下文中,对不起。
我想做的是使用这个脚本(从根或从我的用户,最好从我的用户运行)在
中创建这些文件夹/var/www
,然后能够读取和写入文件(和可能的其他文件夹)到那些目录与标准的PHP用户,在我的情况下是www-data
您的PHP作为apache扩展运行,并使用apache权限。如果需要以根用户身份创建文件夹,可以为其创建cron脚本,它将监视某些文件中的更改,并以根用户身份创建目录。另一种方法是使用suid扩展,但它有点复杂。