好的,我在 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。