我和我的同事最近花了很长时间试图弄清楚为什么 PHP 7 在浏览器中显示为纯文本而不是运行。我们发现了一个包含这些命令的 StackOverflow 已投票答案。
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)
它解决了问题,但不幸的是答案没有包含这些命令的作用的解释。我们理解sudo service apache2 restart但不理解前两行。我在网上搜索,但只找到了此代码的更多实例,但没有真正解释它是如何工作的或为什么需要它。
这些命令有什么作用以及何时需要?
我在 Ubuntu 14.04 机器上使用 php-fpm 5.5.9 和 nginx 1.4.6。我已经使用 apt-get 包管理器安装了它们。我无法获取我的 index.php 脚本在错误日志中以及浏览器上遇到的错误的堆栈跟踪。我从 stackoverflow 和其他文章中搜索并实现了几个解决方案,但没有一个对我有用。这是我的 nginx conf 和 php-fpm conf 文件。如果我犯了任何愚蠢的错误,请帮助我。
Nginx 配置:
location ~ \.php$ {
# With php5-fpm:
#try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
proxy_connect_timeout 600;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_pass 127.0.0.1:7777;
fastcgi_index index.php;
}
Run Code Online (Sandbox Code Playgroud)
PHP-FPM 配置:
error_log = /tmp/php5-fpm.log
Run Code Online (Sandbox Code Playgroud)
PHP-FPM池配置:
catch_workers_output = yes
slowlog = /var/log/php-fpm/$pool.log.slow
listen = 127.0.0.1:7777
php_flag[display_errors] = On
php_admin_value[error_log] = /tmp/fpm-php.www.log
php_admin_flag[log_errors] = On
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我正在尝试使用sudo apt-get install php-fpm. 当我执行该命令时,它给出了错误:E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
当我输入时,sudo dpkg --configure -a它显示:
Setting up mariadb-server-10.1 (1:10.1.44-0ubuntu0.18.04.1) ...,并且需要永远。我尝试过重新启动,但这并没有多大作用。
我需要安装 php-fpm (和其他),所以我不太确定要做什么。
我读过这些帖子:并按照他们所说的做了,但无济于事
我按照此处的指示将服务器 API 条目切换为 FPM/FastCGI.from Server API Apache 2.0 Handler。当启用 mpm_event 且 a2dismod php7.4 时,phpinfo.php 仅显示:
<?php phpinfo(); ?>
Run Code Online (Sandbox Code Playgroud)
阿帕奇状态:
Apache Server Status for localhost (via 127.0.0.1)
Server Version: Apache/2.4.46 (Ubuntu) mod_fcgid/2.3.9 OpenSSL/1.1.1f
Server MPM: event
Server Built: 2020-11-13T01:36:38
----------------------------------------------------------------------
Current Time: Saturday, 27-Feb-2021 13:08:50 EST
Restart Time: Saturday, 27-Feb-2021 13:05:50 EST
Parent Server Config. Generation: 1
Parent Server MPM Generation: 0
Server uptime: 3 minutes
Server load: 0.80 0.95 1.07
Total accesses: 14 - Total Traffic: 190 kB …Run Code Online (Sandbox Code Playgroud) top并mpstat显示出不同的结果。
top:
%Cpu(s): 10.9 us, 3.1 sy, 0.0 ni, 85.2 id, 0.2 wa, 0.0 hi, 0.7 si, 0.0 st
31426 www-data 20 0 309088 21276 14600 S 22.3 0.1 0:07.36 php-fpm: pool www
31431 www-data 20 0 308980 21232 14568 S 22.3 0.1 0:01.69 php-fpm: pool www
31423 www-data 20 0 308992 21376 14664 S 21.6 0.1 0:08.38 php-fpm: pool www
31437 www-data 20 0 308988 21224 14568 R 20.9 0.1 0:00.66 php-fpm: pool www
Run Code Online (Sandbox Code Playgroud)
和 …
我们的服务器是 Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-135-generic x86_64)。
我们按照https://tecadmin.net/install-multiple-php-version-apache-ubuntu/的指示,在 7.2 是新版本时恢复了 PHP 5.6 和 7.2,并升级并添加了 7.3 和 7.4直到今天早上都没有问题。昨天还运行得很好,但今天就不行了。我们昨天早些时候打包了更新,但它不需要重新启动,并且不相信它会在一夜之间自行重新启动,正如我们uptime所说的那样,我们已经接近 15 天了。
所以今天我们再次开始执行这个过程并完成了这个,在每一步之后重新启动 apache2:
尝试过:
a2enmod actions fcgid alias proxy_fcgi
Run Code Online (Sandbox Code Playgroud)
并得到:
ERROR: Module fcgid does not exist!
Run Code Online (Sandbox Code Playgroud)
确实apt install apache2 libapache2-mod-fcgid有效并添加了软件包。
做了a2enmod actions fcgid alias proxy_fcgi,它说一切都已启用。
检查了conf文件/etc/apache2/sites-enabled:
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
尝试phpinfo()页面并得到 PHP 7.4.15,而不是预期的 5.6.40。我们对 7.3 做了同样的事情,并且phpinfo()使用 php7.3 的 SetHandler 也得到了相同的 7.4。
然后尝试systemctl status …