来自root用户的PHP,mkdir权限被拒绝

时间:2016-08-19 20:11:36

标签: php linux command-line permissions zend-framework2

今天我遇到了一种我不理解的奇怪行为 我正在尝试使用 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>

1 个答案:

答案 0 :(得分:0)

你的php作为apache扩展运行,并使用apache权限。 如果您需要以root身份创建文件夹,则可以为其创建cron脚本,该脚本将监视某些文件中的更改,并以root身份创建目录。 另一种方法,使用suid扩展,但它有点复杂。