我在 PHP 脚本中使用 mkdir() 时一直出现权限被拒绝的情况。
mkdir:无法创建目录:权限被拒绝:
$mount = shell_exec( "mkdir -p {$mntdir}/{$hostname} 2>&1");
我尝试写入文件夹
/home/user/mnt
当我在命令行中输入以下内容时它确实有效,那么我缺少哪些权限?
php -r "shell_exec('mkdir -p /home/user/mnt/test');"
RHEL7/PHP 版本 5.4.16
任何帮助将非常感激!
答案1
selinux 是否生效?
使用命令检查
sestatus
如果强制执行 - 然后尝试设置此参数
setsebool -P httpd_enable_homedirs true
您还可以通过以下方式监视 selinux 拒绝消息
sealert -a /var/log/audit/audit.log
答案2
为什么不使用 php 函数mkdir
?
if (!mkdir($dir, 0755, true)) {
die('Failed to create folders...');
}
如果您启用了警告,则当目录已存在或者您没有该目录的权限时,您将收到警告。
答案3
在没有看到配置的情况下,我认为问题出在运行 PHP 脚本的用户身上。
当您通过命令行 PHP 从 shell 运行脚本时,您将以当前登录用户的身份运行该脚本,该用户有写入的权限/home/user/mnt
。
但是,您的 Web 服务器 PHP 进程正在以另一个用户身份运行,该用户没有写权限,因此创建失败。