升级到16.04。php7在浏览器中不起作用


69

我刚刚从14.10升级到16.04,并且不确定如何在Apache中配置PHP 7。我确实修改了php7.0.conf文件以取消注释最后几行,重新启动了apache2,没有任何更改。

我需要更改apache2设置以允许php吗?

PHP从命令行运行,因此我确定PHP已正确安装。

另外,我在phpadmin上收到一条错误消息,说缺少mbstring。


1
运行中的CLI SAPI(php命令)与其他PHP SAPI(apache2,FPM,CGI等)正交,因此运行中的命令行PHP并没有说明在HTTP服务器中运行PHP。
oerdnj '16

2
对于缺少的mbstring,请执行以下操作sudo apt-get install php-mbstring:(谁会想到的,对吗?)
oerdnj '16

“ php7无法在浏览器中工作”是什么意思?您是否在谈论Apache无法启动?PHP不是客户端语言。
Andrea

看到所有这些指导用户启用mpm-prefork和mod-php的答案确实令人沮丧。这是一个巨大的倒退。
Andrew Ensley'6

Answers:


81

和以前一样,您必须为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

对于其他缺少的模块,也需要安装类似的东西。


php模块在安装时应默认启用。如果不是,那一定是完整的sudo a2enmod php7.0(或者我是通过在我的计算机上禁用和重新启用来确定的。)有趣的是,我收到了以下消息:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies

@DougSmythies我以为您没有读过我说过必须启用该模块的位置...
Thomas Ward

1
是的,我做到了,这就是为什么我发表评论。sudo a2enmod php将无法正常工作,我尝试了。但是sudo a2enmod php7.0会起作用。
Doug Smythies

1
应该将其标记为正确答案。默认情况下,Ubuntu 16.04全新安装不包括此apache2模块。
Selosindis

@Selosindis绝对同意!但是仍然令人烦恼的是,与旧版本相比,使用Ubuntu 16.04更改了标准安装过程。
苏格拉底

40

要将php7配置为与服务器一起运行,您需要进行一些配置:

1.确保删除任何痕迹 php/php5

打开终端Ctrl+ Alt+,T然后:

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(通过更少的滚动使您可以轻松地上下滚动,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现在应该正确配置了。


2
使用a2enmoda2dismod命令,而不要手动修改mods-available/中的链接mods-enabled(类似a2enconfa2disconffor conf-{available,enabled})。
muru

1
根据您的输入修改了我的答案。
Videonauth

摆弄链接是有害的,因为a2enmoda2dismod记住内部apache2程序包注册表中模块的状态,因此,手动升级/删除链接可能会使您的系统在将来的升级中损坏,因为升级脚本会查看此内部数据库的状态。
oerdnj '16

@oerdnj:做一个煎蛋卷可能会破坏鸡蛋... ;-)
Fabby

1
@David Wright-也许您正在尝试从用户目录运行PHP脚本-默认情况下,这些脚本处于禁用状态。如果是这样,您需要打开php7.0.conf并注释掉最后一部分。这里更多devplant.net/2010/05/04/...
xcxc

12

我也有这个问题。

它帮助我删除了所有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

1
我之前尝试过几件事,这种方法对我有用。谢谢!!!
Srikanth Ponnapalli

1
我的天啊。你救了我。
plhn

这是唯一对我有用的解决方案。干杯!
geevee

这对我有帮助,因为在Ubuntu升级后,我没有在conf-avaliable中找到php7.0-cgi。但是请记住,这样做sudo apt-get purge php*也将删除您的phpMyAdmin。
ArturCzyżewski

8

我的情况不仅是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

这样就解决了所有问题


7

我为这个问题找到的解决方案是short_open_tag的默认PHP.INI设置。默认情况下,此设置为“关闭”。我的PHP代码以

   <?

代替

   <?php

如果启用了short_open_tag(通过在我的php.ini中将“ Off”更改为“ On”)并重置apache服务器(sudo service apache2 restart),PHP会重新弹出。


噢!当然,这将是最后一封对我有用的最后评论!非常感谢你,@ patrick!
hyperGeoMetric

0

https://wiki.archlinux.org/index.php/Apache_HTTP_Server

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

注意:以上是必填项,因为libphp7.sowith php-apache不能与一起使用mod_mpm_event,而只能 mod_mpm_prefork代替。(FS#39218

否则,您将收到以下错误:

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
AH00013: Pre-configuration failed
httpd.service: control process exited, code=exited status=1

或者,您可以使用mod_proxy_fcgi(请参阅下面的“ 使用php-fpm和mod_proxy_fcgi”)。


0

我也可以从Ubuntu 16.04上的命令行成功运行php脚本,但不能在任何浏览器中运行。为了解决该问题,我清除了php7.0和apache2的现有副本。此后,我从命令行(包括apache2的php库)重新安装了它们。当我尝试运行“ a2enmod php7.0”时,沮丧的心情随之而来,这告诉我尽管再次能够从命令行运行php脚本,但php7.0模块并不存在。本能开始。打开Synaptic时,我发现从命令行安装apache2 php库时,我仅安装了libapache2-mod-php7.0,并且忘记了还要安装“包装器” libapache2-mod-。 php,没有前者将无法运行。


1
“包装器”的名称是什么?
EKons,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.