Apache正在下载php文件而不是显示它们

时间:2013-08-24 19:10:18

标签: php apache centos

操作系统和服务器信息:

  • CentOS 6.4(最终版)
  • Apache 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

但没有运气。

26 个答案:

答案 0 :(得分:71)

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固执地缓存结果并且它一直在下载源代码而在另一个浏览器中它很好。

答案 1 :(得分:15)

经过艰苦的努力,我终于解决了这个问题。

如果系统提示您下载.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的情况下创建一个符号链接,指向存储在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

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

答案 2 :(得分:14)

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

如果您有类似

的内容
AddHandler x-mapp-php6 .php3 .php4 .php .phtml

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

只需从.htaccess文件中删除AddHandler行即可解决此问题。

答案 3 :(得分:5)

请查看您的addtype指令。

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

请试试这个:

AddType text/html .php

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

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

如果它有用,请在运行CentOS 5.9的服务器上复制我的/etc/httpd/conf.d/php.conf文件:

#        
# 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

答案 4 :(得分:5)

由于你的php需要缺少模块,这可能会发生。 假设您已安装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

答案 5 :(得分:4)

如果你的.htaccess有这样的东西......      AddHandler应用程序/ x-httpd-php53 .php .php5 .php4 .php3 然后评论并重新尝试刷新这对我有用......

答案 6 :(得分:3)

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

AddHandler x-mapp-php5.5  .php

我评论过它,一切正常。

感谢所有人!!!

答案 7 :(得分: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页面了。

答案 8 :(得分:2)

如果有人在Linux环境下使用php7

确保启用php7

sudo a2enmod php7

重启mysql服务和Apache

sudo systemctl restart mysql
sudo systemctl restart apache2

答案 9 :(得分:1)

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

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

sudo service apache2 restart

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

我需要重新安装并激活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 / <下的重新检查配置向导/virtual-server/check.cgi。 em>系统设置。

此后,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

答案 12 :(得分:1)

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

答案 13 :(得分:1)

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

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

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

答案 14 :(得分:1)

我有类似的症状,还有另一个解决方案: 在/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.

答案 15 :(得分:0)

对于那些在将近6年后(甚至更长的时间)从Google找到这篇文章的人,您可能在使用UserDir模块的同时使用Apache 2和PHP 7遇到了这个问题。

此问题的另一个可能原因是您正在尝试从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>

答案 16 :(得分: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
    

答案 17 :(得分:0)

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

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

a2enmod php7 && service apache2 restart

答案 18 :(得分:0)

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

中的apache配置中
  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off

答案 19 :(得分:0)

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

您可以本地修改 .htaccess 文件,也可以(本地)删除文件

答案 20 :(得分:0)

好吧...我知道已经有1.000.000的答案可以解决这个问题,但是-我已经花了至少6个小时的有效时间来弄清楚这个问题;而且我已经在Google上搜索了数百次,却没有找到任何关于它的帖子。所以我想在这里将解决方案添加到我的问题中。

结论

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

php_admin_value engine Off
IPCComTimeout 31

我不知道他们在做什么或如何到达那里,但是我的.conf文件中的每个文件中都有。而且,如果我删除了这些行和/etc/apache2/sites-enabled/文件夹中的ensure that there is a symlink,那么它不会下载index.php-一切都会正常工作。

整个故事

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

我尝试了各种东西:

  • 删除了PHP7.2,并安装了PHP5.6(我现在知道,PHP版本与它无关;这是需要工作的apache配置)。
  • 尝试在现有安装上启用和禁用apache模块,但是没有运气。
  • 然后我removed apache completely并重新安装它,然后问题仍然存在
  • 尝试在VirtualMin(Webmin >>服务器>> Apache Webserver)中使用Virutal Server设置。
  • 检查了单个虚拟服务器上的配置(Virtualmin >>系统设置>>重新检查配置)...此步骤非常好,因为它告诉您Apache中缺少哪个模块。之后,我可以使用a2enmod [MODULE_NAME]启用它。我通过在Google周围搜索找到了模块名称。在进行验证的那一步之前,我必须激活大约6-8个模块-并且缓存用尽了几分钟,所以这样做很繁琐。
  • 最后,我想出了上面写的结论-连同符号链接-然后使它起作用。不过,我必须对VPS上的每个站点都进行检查。

答案 21 :(得分: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&amp;保存。

<?php
  phpinfo();
?>

检查浏览器:

  

http://localhost/info.php

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

答案 22 :(得分: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

答案 23 :(得分:0)

如果以上都不起作用,

尝试评论该行

SetHandler ....

并使用

重启apache
/etc/init.d/httpd restart

它应该有用!

答案 24 :(得分:0)

将php5从旧版本升级到5.5.9时,我遇到了与OP类似的问题,这是与Mint 17一起安装的版本。

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

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

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

<?php phpinfo(); ?>

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

答案 25 :(得分:-1)

如果你的.htaccess有这样的话

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm