Apache-2.4
Apache 與 PHP-FPM - PHP 不執行
我在 CentOS 7.x 環境中使用本教程編譯了支持 FPM 的 PHP 7。
我能夠通過執行通過 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,它執行成功。
現在我已經創建了虛擬主機並將域引導到一個目錄。我已經粘貼了一個
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)
解決了這個問題。我已按照以下步驟操作。
確保 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
更新虛擬主機配置文件
例如,您正在託管
example.com
. 現在打開域的虛擬主機配置。這是一個最簡單的例子。<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 文件。