升级到16.04。 php7无法在浏览器中工作

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

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

PHP从命令行工作,所以我确信php已正确安装。

另外,我在phpadmin上收到错误,说明缺少mbstring。

就像以前一样,你必须为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 

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

要配置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目录。 通过sudo rm 删除任何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 cat /var/log/apache2/error.log | less (通过较少的管道使您可以轻松地向上和向下滚动, q退出输出)。

如果你的error.log包含很多(我的字面意思是一堆 ), MIBS not found一些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设置。 默认情况下,此项设置为“关闭”。 我的PHP代码开始于

   

代替

   

如果启用了short_open_tag(通过在我的php.ini中将'Off'更改为'On')并重置apache服务器( sudo service apache2 restart )并且PHP恢复活跃。

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

 sudo a2dismod mpm_event sudo a2enmod mpm_prefork service apache2 restart 

注意:以上是必需的,因为php-apache附带的mod_mpm_event不能与mod_mpm_event一起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 )。

我也可以在Ubuntu 16.04上从命令行成功运行php脚本,但不能在任何浏览器中运行。 为了解决这个问题,我清除了php7.0和apache2的现有副本。 此后,我从命令行重新安装了两个,包括apache2的php库。 当我试图运行“a2enmod php7.0”时出现了挫折感,这告诉我php7.0模块不存在,尽管事实上我再一次能够从命令行运行php脚本。 踢出了本能。开放Synaptic,我发现当我从命令行安装apache2 php库时,我只安装了libapache2-mod-php7.0,并且忘记了安装“包装器”,libapache2-mod- php,没有它,前者将不起作用。