我刚刚从 14.10 升级到 16.04,不确定如何在 apache 中配置 PHP 7。我确实修改了 php7.0.conf 文件以取消注释最后几行,重新启动了 apache2,但没有任何变化。
我是否需要更改 apache2 设置以允许 php?
PHP 可以通过命令行运行,因此我确信 php 已正确安装。
此外,我在 phpadmin 上收到一个错误,提示缺少 mbstring。
答案1
就像以前一样,您必须为 Apache 安装 PHP。
来自服务器指南:
sudo apt install php libapache2-mod-php
该命令将安装 PHP 和 Apache 2 PHP 模块。只需像以前一样配置 Apache(sudo a2enmod php7.0
我认为,将启用该模块)。
您的mbstring
问题类似 - 您需要安装该扩展:
sudo apt install php7.0-mbstring
对于其他缺失的模块,也需要安装类似的东西。
答案2
要配置 php7 以与您的服务器一起运行,您需要进行一些配置:
1. 确保清除所有php/php5
打开终端Ctrl++Alt并T:
cd /etc/apache2/mods-enabled
ls -la
输出应该不是包含任何php5.conf
或php5.load
,但如果包含,请执行以下操作:
# this is the proper way of disabling modules
sudo a2dismod php5
# run this only if the above command didn't remove the php5 sym-links
sudo rm php5.load
sudo rm php5.conf
现在添加php7.0.conf
和php7.0.load
:
# this is the proper way of enabling modules
sudo a2enmod php7.0
# run this only if the above command didn't create the php7.0 sym-links
sudo ln -s php7.0.conf ../mods-available/php7.0.conf
sudo ln -s php7.0.load ../mods-available/php7.0.load
输出ls -la php*
应如下所示:
lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.conf -> ../mods-available/php7.0.conf
lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.load -> ../mods-available/php7.0.load
处理完模块后,我们现在进入/etc/apache2/conf-enabled
目录。在这里删除 php/php5 的所有痕迹,方法是:sudo rm <name>
然后,如果需要的话,执行以下操作:
# the proper way of enabling configs
sudo a2enconf php7.0-cgi
sudo a2enconf php7.0-fpm
# do those commands only if the above didn't work out
sudo ln -s php7.0-cgi.conf ../conf-available/php7.0-cgi.conf
sudo ln -s php7.0-fpm.conf ../conf-available/php7.0-fpm.conf
输出ls -la php*
应如下所示:
lrwxrwxrwx 1 root root 33 Apr 21 17:00 php7.0-cgi.conf -> ../conf-available/php7.0-cgi.conf
lrwxrwxrwx 1 root root 33 Apr 21 17:01 php7.0-fpm.conf -> ../conf-available/php7.0-fpm.conf
2. 重新启动 Apache2
在重新启动 Apache 之前,请确保清除 Apache error.log
,然后重新启动:
sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart
error.log
现在通过发出检查cat /var/log/apache2/error.log | less
(通过 less 管道使您可以轻松地上下滚动,q
退出输出)。
如果你error.log
包含很多(我的意思是堆其中一些MIBS not found
会做以下事情:
sudo apt install libsnmp-dev
sudo net-snmp-config --snmpconfpath
sudo apt-get install snmp snmp-mibs-downloader
sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart
再次检查它error.log
现在应该只包含 3 行:
[Sat Apr 23 01:39:07.504005 2016] [mpm_prefork:notice] [pid 1647] AH00169: caught SIGTERM, shutting down
[Sat Apr 23 01:39:08.685774 2016] [mpm_prefork:notice] [pid 9590] AH00163: Apache/2.4.18 (Ubuntu) mod_perl/2.0.9 Perl/v5.22.1 configured -- resuming normal operations
[Sat Apr 23 01:39:08.685938 2016] [core:notice] [pid 9590] AH00094: Command line: '/usr/sbin/apache2'
现在您的带有 php7.0 的 Apache 应该已经正确配置了。
答案3
我也遇到了这个问题。
它帮助我删除所有 PHP 并重新安装 php7。
所需要的只是:
sudo apt-get purge php*
php7 将被删除,之后只需重新安装:
sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0
答案4
我发现的解决该问题的方法就是 PHP.INI 中 short_open_tag 的默认设置。默认情况下,该设置被设置为“Off”。我的 PHP 代码以
<?
代替
<?php
如果启用了 short_open_tag (通过在我的 php.ini 中将“Off”更改为“On”)并重置 apache 服务器 ( sudo service apache2 restart
),PHP 就会重新弹出。