我刚刚从14.10升级到16.04,并且不确定如何在Apache中配置PHP 7。我确实修改了php7.0.conf文件以取消注释最后几行,重新启动了apache2,没有任何更改。
我需要更改apache2设置以允许php吗?
PHP从命令行运行,因此我确定PHP已正确安装。
另外,我在phpadmin上收到一条错误消息,说缺少mbstring。
sudo apt-get install php-mbstring
:(谁会想到的,对吗?)
我刚刚从14.10升级到16.04,并且不确定如何在Apache中配置PHP 7。我确实修改了php7.0.conf文件以取消注释最后几行,重新启动了apache2,没有任何更改。
我需要更改apache2设置以允许php吗?
PHP从命令行运行,因此我确定PHP已正确安装。
另外,我在phpadmin上收到一条错误消息,说缺少mbstring。
sudo apt-get install php-mbstring
:(谁会想到的,对吗?)
Answers:
和以前一样,您必须为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
对于其他缺少的模块,也需要安装类似的东西。
sudo a2enmod php7.0
(或者我是通过在我的计算机上禁用和重新启用来确定的。)有趣的是,我收到了以下消息:Considering conflict php5 for php7.0: Enabling module php7.0.
sudo a2enmod php
将无法正常工作,我尝试了。但是sudo a2enmod php7.0
会起作用。
要将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
(通过更少的滚动使您可以轻松地上下滚动,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现在应该正确配置了。
a2enmod
和a2dismod
命令,而不要手动修改mods-available
/中的链接mods-enabled
(类似a2enconf
和a2disconf
for conf-{available,enabled}
)。
a2enmod
并a2dismod
记住内部apache2程序包注册表中模块的状态,因此,手动升级/删除链接可能会使您的系统在将来的升级中损坏,因为升级脚本会查看此内部数据库的状态。
我也有这个问题。
它帮助我删除了所有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
sudo apt-get purge php*
也将删除您的phpMyAdmin。
我为这个问题找到的解决方案是short_open_tag的默认PHP.INI设置。默认情况下,此设置为“关闭”。我的PHP代码以
<?
代替
<?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
注意:以上是必填项,因为libphp7.so
withphp-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”)。
我也可以从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,没有前者将无法运行。
php
命令)与其他PHP SAPI(apache2,FPM,CGI等)正交,因此运行中的命令行PHP并没有说明在HTTP服务器中运行PHP。