升级到 16.04。php7 在浏览器中无法运行

升级到 16.04。php7 在浏览器中无法运行

我刚刚从 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++AltT

cd /etc/apache2/mods-enabled
ls -la

输出应该不是包含任何php5.confphp5.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.confphp7.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 就会重新弹出。

相关内容