问题描述
我刚刚从14.10升级到16.04,我不知道如何在apache中配置PHP 7。我确实修改了php7.0.conf文件以取消注释最后一行,重新启动apache2并且没有更改。
我是否需要更改apache2设置以允许php?
PHP从命令行工作,所以我确信php已正确安装。
另外,我在phpadmin上收到错误,说明缺少mbstring。
最佳解决方案
就像以前一样,你必须为Apache安装PHP。
来自Server Guide:
sudo apt install php libapache2-mod-php
该命令将安装PHP和Apache 2 PHP模块。只需像以前一样配置Apache(我认为,sudo a2enmod php7.0
将打开模块)。
您的mbstring
问题与此类似 – 您需要安装该扩展程序:
sudo apt install php7.0-mbstring
对于其他缺失的模块,也需要安装类似的东西。
次佳解决方案
要配置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
目录。通过sudo rm <name>
删除任何php /php5的痕迹
然后,如果需要的话:
# 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
现在通过发出cat /var/log/apache2/error.log | less
检查error.log
(通过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。
第三种解决方案
我也遇到了这个问题。
它帮助我删除所有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
第四种方案
我的情况不仅是php不工作,而且phpmyadmin也是我一步一步做的那样
sudo apt install php libapache2-mod-php
sudo apt install php7.0-mbstring
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart
然后:
gksu gedit /etc/apache2/apache2.conf
在最后一行,我添加了Include /etc/phpmyadmin/apache.conf
这解决了所有问题
第五种方案
我发现此问题的解决方案是short_open_tag的默认PHP.INI设置。默认情况下,它设置为’Off’。我的PHP代码开始于
<?
代替
<?php
如果启用short_open_tag(通过在我的php.ini中将’Off’更改为’On’)并重置Apache服务器(sudo service apache2 restart
)并且PHP恢复活动状态。