100

操作系统和服务器信息:

  • CentOS 6.4(最终版)
  • 阿帕奇 2.2.15
  • PHP 5.5.1

我以前安装了 php 5.3.x,但决定升级。我首先卸载了 php 5.3.x,然后安装了 php 5.5.1,但安装完成后,apache 没有解析它只是下载的 php 文件。我在stackoverflow中检查了类似的问题,但到目前为止没有一个对我有帮助。

作为记录,我的 httpd.conf 和 php.conf 中有以下几行应该使 php 工作但不工作:

AddHandler application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php-source .phps
AddHandler php5-script .php

我真的很感激任何帮助。谢谢你。

编辑:

我在 php.conf 中有这些行

<IfModule !worker.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

编辑:

通过删除

AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml

apache 不再下载该文件。现在 apache 正在显示源代码,但并非全部只是一部分。我添加了

AddType text/html .php

但没有运气。

4

26 回答 26

85

php 的正确 AddType 是 application/x-httpd-php

AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps

还要确保您的 php 模块已加载

LoadModule php5_module        modules/mod_php55.so

当您配置 apache 时,请尝试从另一个浏览器查看该页面 - 我曾经有几天 chrome 顽固地缓存结果并且它不断下载源代码,而在另一个浏览器中它很好。

于 2013-08-27T05:34:00.793 回答
25

我今天遇到了这个问题,所描述的解决方案都不适合我。所以这是另一个可能的原因:

如果你有类似的东西

AddHandler x-mapp-php6 .php3 .php4 .php .phtml

.htaccess您的 Web 内容文件夹的文件中,它可能会导致您的 PHP 脚本停止工作。在我的情况下,服务器不知道x-mapp-php6类型,因为该.htaccess文件是我在传输网站内容时从不同的网络主机导入的。

只需AddHandler从文件中删除该行.htaccess就为我解决了。

于 2014-04-11T22:52:31.857 回答
16

经过一番苦苦挣扎,我终于解决了这个问题。

如果系统提示您下载.php文件而不是执行它,那么这里是完美的解决方案:我假设您已经安装了 PHP5,但仍然出现此错误。

$ sudo su
$ a2enmod php5

就是这个。

但如果您仍然收到错误:

Config file php5.conf not properly enabled: /etc/apache2/mods-enabled/php5.conf is a real file, not touching it

然后执行以下操作:

原来文件不应该存储在 . 中mods-enabled,而应该存储在mods-available. 然后应该在 mods-enabled 中创建一个符号链接,指向存储在 mods-available 中的文件。

首先删除原来的:

$ mv /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/

然后创建符号链接:

$ ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf

我希望你的问题得到解决。

于 2014-02-01T11:02:19.887 回答
7

请查看您的 addtype 指令。

在我看来,Apache 正在告诉浏览器它正在为带有 .php5 之类的扩展名的脚本发送一个 application/php 文档类型。事实上,Apache 应该告诉浏览器脚本正在输出 text/html。

请试试这个:

AddType text/html .php

关于上面的建议,你应该告诉浏览器你正在输出一个 PHP 脚本:这对我来说似乎是一个不寻常的想法。我用谷歌搜索了一下,发现网上有很多关于它的讨论。显然,在某些情况下您可能想说您正在发送一个 PHP 脚本(即使 Apache 应该执行该脚本并发出 text/html),也有一些情况是浏览器根本无法识别特定的 Mime类型。

清除浏览器缓存始终是一个好主意。

如果有帮助,这里是我的 /etc/httpd/conf.d/php.conf 文件的副本,来自运行 CentOS 5.9 的服务器:

#        
# PHP is an HTML-embedded scripting language which attempts to make it                                             
# easy for developers to write dynamically generated webpages.                                                  
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
于 2013-08-26T06:31:20.093 回答
6

如果您的 .htaccess 有类似的东西... AddHandler application/x-httpd-php53 .php .php5 .php4 .php3 然后评论它并再次尝试刷新这对我有用...

于 2014-06-10T09:26:37.863 回答
5

这可能是由于缺少 php.ini 所需的模块而发生的。假设您安装了 php7,请使用搜索可用的 php7 模块

sudo apt-cache search php7-*

上面的命令将列出所有可用的 PHP7 模块进行安装。您可以开始安装模块,例如,

sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
于 2016-09-06T13:31:36.010 回答
3

我也有同样的问题。Apache 不会从某个网站加载 php 文件,只是下载它。我阅读了这篇文章和答案,我看到我已经将这一行放入 .htaccess 文件的最后一个位置:

AddHandler x-mapp-php5.5  .php

我已经评论了它,一切正常。

谢谢大家 !!!

于 2015-05-29T10:50:52.327 回答
3

将 PHP 更新到 7.3 后,PHP 脚本使用www-data而不是像以前那样使用$USER运行。

我需要重新安装并激活 PHP-FPM :

sudo apt-get install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo service apache2 restart
sudo a2enconf php7.3-fpm
sudo service apache2 restart

为了确保Virtualmin一切正常,我在Vitualmin / System Settings下使用了Re-Check Configuration向导。/virtual-server/check.cgi

之后,Apache/PHP 正在下载 php 文件而不是运行它们。所以我需要编辑/etc/apache2/mods-available/php7.3.conf以评论如下行SetHandler application/x-httpd-php

<FilesMatch ".+\.ph(ar|p|tml)$">
#    SetHandler application/x-httpd-php
</FilesMatch>

重新启动 Apache 后,它解决了我的问题,希望对您有所帮助。

也要注意浏览器缓存。

我的系统:

Ubuntu          16.04.6 LTS
Webmin version      1.932
Usermin version     1.780
Virtualmin version  6.08
Apache version      2.4.41
PHP versions        7.3.12
PHP-FPM         7.3.12 Server
于 2019-12-11T11:24:29.460 回答
2

从 5.3 升级到 5.4 后,我以前遇到过类似的问题。但是我的设置看起来有点不同,因为我正在运行 Debian 并使用 fcgid 来服务器 PHP 页面,而不是 PHP5 apache/cgi 模块。所以在我升级后,它还安装了 php5_cgi,它与我的 fcgid 设置冲突,不再执行 PHP 文件。

我不得不禁用 Apache 模块并重新启动 Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

一旦 php5_cgi 模块退出,fcgid 就能够再次提供 PHP 页面。

于 2014-01-14T10:47:59.113 回答
2

我有类似的症状,但还有另一种解决方案:在 /etc/apache2/mods-enabled/php5.conf 的评论中有一个有用的建议,我遵循了:

# To re-enable php in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
于 2014-12-16T19:00:38.810 回答
2

万一有人在Linux环境下使用php7

确保启用 php7

sudo a2enmod php7

重启mysql服务和Apache

sudo systemctl restart mysql
sudo systemctl restart apache2
于 2018-03-26T08:00:03.717 回答
1

我花了两天时间跟踪这件事,发现我把我的 PHP 脚本放在了错误的目录中。

在我的标准 Ubuntu 安装中,我将脚本放入/var/www. 他们应该在/var/www/html

我刚开始 PHP 工作,所以我不知道我的解决方案是否与您经历的版本更改有关。

于 2015-03-08T01:26:00.107 回答
1

我有这个问题。事实证明,我同时安装了 nginx 和 apache,并在启动时自动启动。问题是 nginx 首先绑定到 http 端口,这阻止了 apache 启动。

于 2017-04-01T10:49:14.640 回答
1

我遇到了这个问题,如果您实际上从未使用过服务器配置设置,那么您的问题是.htaccess文件中的 90%

您要么在本地修改.htaccess文件,要么将其删除(本地)

于 2018-12-12T19:19:11.993 回答
1

这为我解决了问题(我安装了 php7):

sudo apt-get install libapache2-mod-php7.0

sudo 服务 apache2 重启

于 2016-05-09T21:00:49.663 回答
1

也有可能您正在运行 nginx,但您的 php 设置为与 apache 一起运行。要验证,运行service nginx statusservice apache2 status查看哪个正在运行。如果 nginx 正在运行而 apache 没有,只​​需运行sudo service nginx stop; sudo service apache2 start,您的服务器现在将按预期提供 php 文件。

于 2018-06-29T07:11:59.967 回答
1

如果您有 virtualmin,请尝试在 /etc/apache2/sites-available 中的 apache 配置中注释掉这些行

  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off
于 2019-01-11T12:20:50.990 回答
1

好的...我知道这个问题已经有 1.000.000 个答案,但是我至少花了 6 个有效时间来弄清楚这个问题;我已经用谷歌搜索了数百次,但没有找到一篇关于它的帖子。所以我想我会在这里为我的问题添加解决方案。

结论

/etc/apache2/[[SERVER-NAME].conf如果我在-file的 .conf 文件中将这两行注释掉:

php_admin_value engine Off
IPCComTimeout 31

我不知道他们做了什么或他们是如何到达那里的,但它在我的每个文件中.conf。如果我删除这些行并确保 -folder 中有一个符号链接/etc/apache2/sites-enabled/那么它不会下载 index.php - 并且每个都可以正常工作。

整个故事

我在 Ubuntu 16.04 VPS 上安装了 VirtualMin。我升级到 PHP 7.2 版。不久之后,我更新了 Ubuntu 版本并遇到了“内核偏移:禁用”错误。所以我不得不去删除最新的 Ubuntu 版本,当我的操作系统再次启动时:BOOM!我得到了他的帖子提到的错误:对于我的 VPS 上的每个站点,它只是下载了 index.php 而不是显示它。

我尝试了各种各样的东西:

  • 删除了 PHP7.2 并安装了 PHP5.6(我现在知道,PHP 版本与它无关;需要工作的是 apache 配置)。
  • 尝试在现有安装上启用和禁用 apache 模块,但没有运气。
  • 然后我完全删除了apache并重新安装了它,问题仍然存在!
  • 尝试在 VirtualMin ( Webmin >> Servers >> Apache Webserver ) 中使用虚拟服务器设置。
  • 检查单个虚拟服务器上的配置( Virtualmin >> System Settings >> Re-Check Configuration )...这一步非常好,因为它告诉 Apache 中缺少哪个模块;之后我可以使用a2enmod [MODULE_NAME]. 我通过谷歌搜索找到了模块名称。在我通过验证的那一步之前,我必须激活大约 6-8 个模块 - 并且在缓存用完之前需要几分钟,所以这样做是一个乏味的步骤。
  • 最后,我想出了上面写的结论——连同符号链接,——然后我得到了它的工作。不过,我必须为我的 VPS 上的每个站点都检查一遍。
于 2018-07-04T11:04:57.930 回答
0

在将 php5 从旧版本升级到 5.5.9(即安装了 Mint 17 的版本)时,我遇到了与 OP 类似的问题。

我正在本地网络上的机器上运行 LAMP 设置,在将这些更改上传到实际的实时服务器之前,我使用它来预览对网站的更改。所以我维护了一个完美的实际站点的本地镜像。

升级后,在实际站点上运行和显示完美的文件将不会显示,或者只会在本地机器上显示 html。PHP 没有被解析。phpinfo() 命令有效,所以我知道 php 可以正常工作。日志没有产生错误。查看页面源代码向我展示了实际的 php 代码。

我构建了一个包含以下代码的 test.php 页面:

<?php phpinfo(); ?>

这行得通。然后我发现当我更改<?php<?命令不再起作用时。我所有的 php 网站都使用<?,而不是<?php可能不理想,但这是现实。我通过转到 /etc/php5/apache2 来解决问题,搜索“short_open_tag”并将值从 Off 更改为 On。

于 2014-12-01T21:03:40.693 回答
0

我遇到了这种问题。这就是我解决它的方法。安装Apache后,我使用此命令安装了PHP 。

sudo apt-get install php libapache2-mod-php

它执行正确,但我从 Apache 请求.php文件,它在不执行PHP脚本的情况下给出。

然后我检查 PHP 是否启用。

$ cd /etc/apache2
$ ls -l mods-*/*php*

但它没有显示任何结果。我检查已安装的 PHP 包。

$ dpkg -l | grep php| awk '{print $2}' |tr "\n" " "

我的电脑上安装了不同类型的PHP版本。然后,我使用apt-get purge从之前的列表中删除了一些PHP包。

sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json

我重新安装PHP

sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

验证 PHP 模块是否已加载

$ a2query -m php7.0

如果未启用:

$ sudo a2enmod php7.0

重启Apache服务器

$ sudo systemctl restart apache2

最后,我在Apache上检查PHP进程

创建一个空文件

sudo vim /var/www/html/info.php

将此内容添加到 info.php 并保存。

<?php
  phpinfo();
?>

检查浏览器:

http://localhost/info.php

它显示正确。我认为这对任何人都有帮助。

于 2017-08-24T06:39:58.213 回答
0

如果以上都不起作用,

尝试注释掉该行

SetHandler ....

并使用重新启动apache

/etc/init.d/httpd restart

它应该工作!

于 2017-04-11T14:05:51.327 回答
0

PHP56

vim /etc/httpd/conf/httpd.conf

LoadModule php5_module        libexec/apache/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
于 2017-08-04T08:02:40.187 回答
0

对于在近 6 年后(甚至更久!)从 Google 找到这篇文章的人来说,您可能会在使用 Apache 2 和 PHP 7 时遇到这个问题,同时也使用该UserDir模块。

此问题的另一个可能原因可能是您试图从UserDir模块的“用户目录”中运行脚本。默认情况下禁用在用户目录中运行 PHP 脚本。如果脚本位于public_html主文件夹的目录中并且您尝试从http://localhost/~your_username.

要解决此问题,请打开/etc/apache2/mods-enabled/php7.2.conf. 您必须评论或删除底部的标签块

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>
于 2020-03-30T04:13:29.653 回答
0

当我从 PHP 7.2 升级到 PHP 7.4 时,我也遇到了同样的问题。通过以下方式工作: -

  1. [domain].conf file,评论如下:

    php_admin_value engine Off
    

    并补充说:

    AddType  application/x-httpd-php-source  .phps
    AddType text/html .php
    
  2. 通过以下方式禁用 mod 7.2 并启用 7.4:

    a2dismod php7.2
    a2enmod php7.4
    
  3. /etc/apache2/mods-enabled/php7.4.conf文件中,评论以下内容:

    SetHandler application/x-httpd-php
    php_admin_flag engine Off
    
于 2020-02-12T14:36:58.537 回答
0

zypper rm php*使用卸载PHP并再次安装后我遇到了同样的问题zypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear

我通过启用 apache2 模块并重新启动网络服务器来解决它:

a2enmod php7 && service apache2 restart
于 2020-09-24T11:14:58.073 回答
-1

如果你的 .htaccess 有这样的东西

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
于 2017-05-22T07:24:14.947 回答