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