我有运行Apache 2.2.4和PHP-FPM(FastCGI Process Manager)的VPS服务器(CentOS 6.5)。查看php-fpm error_log我发现每个spawn php-fpm子进程都出错:
WARNING: [pool www] child 24086 said into stderr: "ERROR: Unable to set php_value 'soap.wsdl_cache_dir'"
我找不到关于此警告谷歌搜索的任何信息。有人知道这意味着什么以及如何摆脱这种警告?
更新1:
apache的fastcgi.conf:
User apache
Group apache
LoadModule fastcgi_module modules/mod_fastcgi.so
<IfModule mod_fastcgi.c>
DirectoryIndex index.php index.html index.shtml index.cgi
AddHandler php5-fcgi .php
# For monitoring status with e.g. Munin
<LocationMatch "/(ping|status)">
SetHandler php5-fcgi-virt
Action php5-fcgi-virt /php5-fcgi virtual
</LocationMatch>
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /tmp/php5-fpm.sock -pass-header Authorization
</IfModule>
# global FastCgiConfig can be overridden by FastCgiServer options in vhost config
FastCgiConfig -idle-timeout 20 -maxClassProcesses 1
这是php的php-fpm.conf和pool配置:
pid = /var/run/php-fpm/php-fpm.pid
daemonize = yes
; Start a new pool named 'www'.
[www]
listen = /tmp/php5-fpm.sock
group = apache
pm = dynamic
pm.max_children = 8
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.status_path = /status
ping.path = /ping
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
其他所有内容都是默认设置。
更新2:
按照建议手动创建/var/lib/php/wsdlcache
目录并将权限设置为770并将所有者设置为root:apache
后,我希望我不会再次看到错误,但不幸的是重启php-fpm
进程后错误再次存在,这变得非常奇怪。
P.S。也许这个问题更适合serverfault,但通常在stackoverflow上有更多的php和apache配置专家。
答案 0 :(得分:15)
我讨厌如此微不足道的解决方案。最后,我自己找到了问题和解决方案。留在这里供其他有史以来的人参考。
FastCGI配置文件是在首次配置FastCGI时从互联网上获取的,因为之前我没有使用它。显示FastCGI配置的教程包含行php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
。我真的很感兴趣什么是SOAP,因为我没有在我在这台服务器上运行的网站上使用它,这种好奇心为我带来了解决方案。实际上我不需要SOAP,只是删除那行就可以解决我想的问题,但我决定把它留在那里,发现我只需要安装php-soap
。
yum install php-soap
对于RHEL / CentOS
重新启动php-fpm
后,我没有收到重生fpm进程的错误。
答案 1 :(得分:2)
如果池配置中指定的目录/var/lib/php/wsdlcache
不存在且PHP工作者也无法创建,则会收到该消息。请注意,PHP工作程序不是以root用户身份运行,而是以用户apache
运行(这对于安全性非常好,应该保持这种状态!),因此很可能在/var/lib
中没有写入权限。 Kepp还记得工作人员可以被chrooted(你的配置看起来不像你在做,但是可以) - 在这种情况下,目录当然是在chroot监狱里面。
创建该目录并修改访问权限,以便apache
能够读取和写入它,一切都应该没问题。
答案 2 :(得分:0)
非常确定您不能将php_value
用于(快速)CGI。如果使用比5.3.0更新且需要PHP_INI_PERDIR
ini设置的PHP版本,您可能需要查看user.ini个文件。
自PHP 5.3.0起,PHP包括对a上的配置INI文件的支持 每个目录的基础。这些文件仅由CGI / FastCGI处理 SAPI。此功能废弃了PECL htscanner扩展。如果 你正在使用Apache,使用.htaccess文件可以达到同样的效果。
更新:没有看到它是pool www
。正如Johannes H.所说:“你可以在php-fpm的池配置中使用php_value ......”。我的原始答案只适用于每个目录调整。请参阅下面的约翰内斯评论。