Apache下载php文件而不是处理它们(在php 7升级之后)


Apache downloads php files instead processing them (after php 7 upgrade)

我已经安装了CentOS 7.2, Apache 2.4.6和php 5.4在上面运行。现在我想将PHP版本升级到7,因此我按照本文中描述的步骤进行操作:

如何升级到php7

curl 'https://setup.ius.io/' -o setup-ius.sh
sudo bash setup-ius.sh
sudo yum remove php-cli mod_php php-common
sudo yum install mod_php70u php70u-cli php70u-mysqlnd
sudo apachectl restart

它安装了php 7,我可以用它来执行php代码。php -v给我:

PHP 7.0.9 (cli) (built: Aug 16 2016 10:01:52) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

当我通过apache使用<php phpinfo(); ?>访问php文件时,它会要求我下载该文件。

在我的/etc/httpd/conf.modules.d中我有以下内容:

<IfModule prefork.c>
  LoadModule php7_module modules/libphp7.so
</IfModule>
<IfModule !prefork.c>
  LoadModule php7_module modules/libphp7-zts.so
</IfModule>

我的虚拟主机在httpd.conf中都有(在旧的php5.4情况下),它们是由我的Virtualmin设置自动创建的:

AddType application/x-httpd-php .php
AddHandler fcgid-script .php
AddHandler fcgid-script .php5
FCGIWrapper /home/myvhost/fcgi-bin/php5.fcgi .php
FCGIWrapper /home/myvhost/fcgi-bin/php5.fcgi .php5

/home/myvhost/fcgi-bin/php5.fcgi的含量如下:

#!/bin/bash
PHPRC=$PWD/../etc/php5
export PHPRC
umask 022
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=99999
export PHP_FCGI_MAX_REQUESTS
SCRIPT_FILENAME=$PATH_TRANSLATED
export SCRIPT_FILENAME
exec /bin/php-cgi

我不知道什么可能是php代码不正确处理apache的原因。我希望你能就如何解决/调查这个问题给我一些建议。如果需要,我很乐意提供更多关于设置的信息。

您需要指定一个Handler而不是媒体类型。例如:

<FilesMatch '.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

旁注:现在,除非你已经为线程安全编译了php,否则你应该使用Apache 2.4与mpm_event和mod_proxy_fcgi + php-fpm,而不是"Apache 2.4 with prefork + mod_php"。

我希望你正在使用webmin(virtualmin),并且在安装php之后,一个文件实际上已经被修改,如果你检查/etc/httpd/conf.d/php.conf,你可能会在其中看到未注释的行。同时,您可能会看到php.conf.rpmnew是旧版本的行注释,所以只需将#添加到该文件中的每一行,或者删除它并将旧文件php.conf.rpmnew重命名为php.conf之后不要忘记重启apache:

apachectl重启