【发布时间】:2016-08-19 20:11:35
【问题描述】:
今天我遇到了一个我不理解的奇怪行为。
我正在尝试使用 PHP 7.0 脚本使用 mkdir() 函数在本地磁盘上创建一个目录,但它会产生 "permission denied" 错误。
根据我的经验(虽然很少),这总是意味着执行 PHP 脚本的用户无权写入目录。这对我来说很有意义,并且在开发 Web 应用程序时通常不是问题。使用 Apache 时的默认 PHP 用户是 www-data,我没有遇到任何问题。
在这种情况下,虽然我使用的是 Zend Framework 2,特别是我使用的是控制台路由,所以我没有通过 Apache(如果我错了,请纠正我)。我将我的脚本称为:
php index.php route name [--options]
与我的用户(不是 root 而是 sudoer)。如果我输出 PHP 的 get_current_user() 函数的结果,问题就开始了,因为我得到的是 'root' 而不是我预期的用户名。不仅如此,当在以下目录中使用mkdir() 时,我得到'permission denied':
drwxr-xr-x 2 www-data www-data 4096 Aug 19 21:21 logs
据我了解,我可能不是 PHP 似乎建议的 root 用户。如果我然后在前面运行带有 'sudo' 的脚本,我可以创建所需的文件夹,但权限与我在 mkdir() 函数中指定的权限不匹配。如果我写mkdir('path', 0777),我会得到:
drwxr-xr-x 3 root root
这个我不明白。因此,如果有人可以帮助我找出我做错了什么,我将非常感激。请记住,我正在使用 Zend Framework 2 的事实可能会影响这种行为(尽管我并不热衷于这样想)。
提前感谢您的宝贵时间。
编辑。
我刚刚意识到我没有告诉你我的最终目标是什么,所以我现在将事情放在上下文中,抱歉。
我想做的是使用这个脚本(从 root 或 my user 运行,最好从 my user 运行)在里面创建这些文件夹
/var/www
然后能够使用标准 PHP 用户(在我的例子中是 www-data
【问题讨论】:
-
也许是 selinux 引起了问题?
-
不确定为什么 get_current_user() 返回“root”,但是您的用户不应该能够写入该日志目录是正确的。我假设您不在 www-data 组中,并且它不是世界可写的。作为旁注,请不要创建 777 目录。我知道这是用于测试,但使用 UNIX 组或 setfacl。
-
啊哈,古老的“不要使用 777”建议。我明白了,谢谢。我只是用它来帮助我更轻松地查明问题而不必担心权限(在虚拟机上,在我的电脑上没有任何重要内容,所以不用担心)。我编辑了这个问题,所以也许你现在可以进一步帮助我
标签: php linux command-line permissions zend-framework2