我已经使用以下方式编译了支持 FPM 的 PHP 7本教程在CentOS 7.x环境中。
我可以通过运行 CLI 来测试 php。
cd /opt/php7/bin
./php --version
输出
PHP 7.0.6 (cli) (built: May 22 2016 07:20:48) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
我也安装了 apache 并且它运行成功。
现在我已经创建了 vhosts 并将域引导到目录。我粘贴了一个info.php
包含该函数的php 文件phpinfo()
,但服务器输出了 PHP 函数而不执行它。
我觉得我现在真的很接近了,只需要配置 apache 来使用 php-fpm 运行,所以我把这个配置放在httpd.conf
文件中,但它没有帮助。
<IfModule mod_fastcgi.c>
DirectoryIndex index.html index.shtml index.cgi index.php
AddType application/x-httpd-fastphp7 .php
Action application/x-httpd-fastphp7 /php7-fcgi
Alias /php7-fcgi /opt/php7/bin/php-cgi
FastCgiExternalServer /var/www/html/ -socket /opt/php7/var/run/php-fpm.pid -pass-header Authorization
<Directory /var/www/html/>
Require all granted
</Directory>
</IfModule>
安装了 fcgi 模块,因为当我运行时apachectl -t -D DUMP_MODULES
我得到了fcgid_module (shared)
答案1
问题解决了。我已按照以下步骤操作。
确保 PHP-FPM 正在运行
首先,如果您没有为 php-fpm 选择任何备用端口,那么它将被设置为在端口 9000 上运行。
/etc/init.d/php-fpm start
或者
/etc/init.d/php7.x-fpm start
如果失败,提示端口已被占用,那么你需要找出端口正在运行的进程号,然后杀它。
netstat -tulpn | grep :8999
这应该会给你当前正在运行的进程 ID。例如,如果进程 ID 是,21190
那么你运行
kill 21190
现在端口已清除,您可以尝试php-fpm
重新启动
/etc/init.d/php-fpm start
更新 vHost 配置文件
例如,您正在托管example.com
。现在打开域的 vhost 配置。这是一个最简单的示例。
<VirtualHost *:80>
DocumentRoot "/var/www/html/example.com/"
ServerName example.com
</VirtualHost>
现在添加以下内容更新:
<VirtualHost *:80>
DocumentRoot "/var/www/html/example.com/"
ServerName example.com
# Setup php-fpm to process php files
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/example.com/$1
DirectoryIndex /index.php index.php
</VirtualHost>
现在 example.com 的所有 php 文件都应该可以执行了。