我知道这个问题以前一定是被问过(而且回答过)的,但是在这些问题中我找不到解决问题的办法。 这有点奇怪…问题是我的PHP脚本(和我的Apache服务器)不能写入我的系统上的文件夹。 一点也不。
例如,运行脚本时出现以下错误:
致命错误:带有消息“Zend_Session :: start() – /var/www/subdomains/vmb/vendor/zendframework/zendframework1/library/Zend/Session.php(Line:482)”的未捕获exception“Zend_Session_Exception”:错误#2 session_start ():open(/ var / www / subdomains / vmb / application /../ var / session / sess_ingph33ir4shr1e60kkifp37s7,O_RDWR)失败:Permission denied(13)
我有一个VPS的CentOS 7,Apache2.4,PHP5.6(它与Apache的PHP MOD)和其他一些东西。 Apache以用户apache和组apache运行(在httpd.conf文件中设置)。 我将/etc/php.ini和/etc/httpd/conf.d/php.conf的session_path设置为/tmp/phpsessions ,将chown'd / chmod这个文件夹设置为apache:apache 777.以上示例存储在另一个文件夹中的会话(也是chown'd / chmod,如apache:apache 777),但是我得到了其他文件夹的相同错误。
所以我的apache服务器运行为apache:apache,我把文件夹转换为apache:apache,我需要,甚至777权限Apache无法写入这些文件夹。
你有没有见过这样的事情? 我以前没有…
假设权限和所有权是好的,我相信这涉及到SELinux 。
快速和肮脏的方式:…假设你在运行getenforce获得getenforce ,尝试通过运行setenforce 0禁用SELinux ,然后再次打你的脚本,如果它工作,那么它是SELinux ,从那里你可以保持禁用(不推荐)或通过运行setenforce 1重新打开它并检查你的/var/log/audit/audit.log并努力find最终解决scheme。
放弃SELinux是因为几个configuration挑战,似乎是一个糟糕的select。 相反,我会build议用一点时间去了解它,并寻找适当的解决scheme。 在这种情况下,它看起来像一个解决scheme可能是设置httpd_sys_rw_content_t (通知'W'为写)文件上下文在您需要的文件夹可写。 请记住, selinux的fcontext需要正则expression式的目标,所以你的命令可能看起来像这样:
semanage fcontext --add \ -t httpd_sys_rw_content_t \ '/var/www/subdomains/vmb/var/session(/.*)?'
正则expression式将上下文规则应用于会话目录下的所有文件以及目录本身。
将策略(仅需要一次)应用于目录及其中的任何文件:
restorecon -R /var/www/subdomains/vmb/var/session
这可能是许多其他的事情,但这至less为我工作。