![php-fpm 存在奇怪的权限问题,session_start 在某些版本上失败,但在其他版本上却可以运行](https://linux22.com/image/803880/php-fpm%20%E5%AD%98%E5%9C%A8%E5%A5%87%E6%80%AA%E7%9A%84%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98%EF%BC%8Csession_start%20%E5%9C%A8%E6%9F%90%E4%BA%9B%E7%89%88%E6%9C%AC%E4%B8%8A%E5%A4%B1%E8%B4%A5%EF%BC%8C%E4%BD%86%E5%9C%A8%E5%85%B6%E4%BB%96%E7%89%88%E6%9C%AC%E4%B8%8A%E5%8D%B4%E5%8F%AF%E4%BB%A5%E8%BF%90%E8%A1%8C.png)
好的,我在 ubuntu 12.04 上安装了 php-fpm/apache/apc,并且有一个运行 php 购物车的网站。
我收到了大量权限错误,例如“无法写入会话数据(文件)。请验证 session.save_path 的当前设置是否正确”或“PHP 警告:session_start() .....失败:权限被拒绝(13)...”
我注意到 sessiondata 文件夹上有一个有趣的问题,这可能是发生这种情况的线索。以下是 sessiondata 文件夹的 ls -la
-rw-rw-r-- 1 www-data phpsite 816 Aug 29 16:32 sess_r9tfvubu6stg6v918qp4b7tcg0
-rw-rw-r-- 1 phpsite phpsite 816 Aug 29 16:32 sess_t99844p7rk6ldk548lplupv485
-rw-rw-r-- 1 www-data phpsite 864 Aug 29 16:30 sess_tdh221j4p6o3pvupc965h6pl56
-rw-rw-r-- 1 www-data phpsite 816 Aug 29 16:31 sess_tdtpp6he2quk7651tsekrhulr5
现在在我的 apache /etc/apache2/conf.d/php5-fpm 文件上我有
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
SetHandler application/x-httpd-php-source
Order Deny,Allow
Deny from all
</FilesMatch>
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
Order Deny,Allow
Deny from all
</FilesMatch>
Action application/x-httpd-php /fcgi-bin/php5-fpm virtual
Alias /fcgi-bin/php5-fpm /fcgi-bin-php5-fpm
<Location /fcgi-bin/php5-fpm>
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
</Location>
FastCgiExternalServer /fcgi-bin-php5-fpm -appConnTimeout 10 -idle-timeout 300 -socket /tmp/php5-fpm.sock -pass-header Authorization
在我的虚拟主机文件上我有
<IfModule mod_fastcgi.c>
Alias /fcgi-bin/php5-fpm /fcgi-bin-php5-fpm-phpsite
FastCgiExternalServer /fcgi-bin-php5-fpm-phpsite -appConnTimeout 10 -idle-timeout 300 -socket /tmp/php5-fpm-phpsite.sock -pass-header Authorization
</IfModule>
最后我的 phpsite Pool 文件
[phpsite]
user = phpsite
group = phpsite
listen.owner = phpsite
listen.group = phpsite
listen = /tmp/php5-fpm-phpsite.sock
并且 sessiondata 文件夹的权限是
drw-rwSr--+ 2 phpsite phpsite 2514944 Aug 29 16:46 .
我不明白为什么有些会话是用 www-data:phpsite 所有权编写的,而其他会话却是 phpsite:phpsite 所有权......
我知道我的权限不知怎么搞错了,但我看不出哪里不对。我也在网站上遇到了 fopen 权限错误!
有人能帮帮我吗?约翰
答案1
phpsite 用户只能更新现有会话 - 它不能创建新会话 - chmod u+x yoursessiondatadirectory - 看起来您已经在 Apache 中将 PHP 作为模块运行。
我真的想不出有什么好的理由来使用 Apache + php-fpm 来运行生产系统:将 mod_php(和 pre-fork MPM)与 Apache 一起使用。如果您正在运行 nginx、G-Wan、Lighttpd,请使用 php-fpm。