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


92

操作系统和服务器信息:

  • 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

但没有运气。


好吧,您是如何安装的?哪个SAPI?另请参阅如何检查已启用/安装了哪些apache模块?
mario

2
您的php模块未运行。
锡胡2013年

1
检查您的httpd.confphp模块是否已评论
MaveRick

1
我编辑了问题。这些模块确实退出了,它们显然正在加载
Anthony Gainor

安装后是否重新启动了Apache?
艾哈迈德

Answers:


79

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顽固地缓存结果,并且它继续下载源代码,而在另一个浏览器中就可以了。


我的情况下没有模块路径
shamaseen

2
您能否在这些行的位置添加一些信息?
索伦

6
对于正在寻找将这些线放置在何处的人们。 /etc/httpd/conf/httpd.conf
Siraj Alam

就我而言,在Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

22

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

如果你有类似的东西

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

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

只需AddHandler.htaccess文件中删除行即可为我解决。


完善。就我而言,AddHandler application/x-httpd-php54 .php54 .php必须将其删除。
Old McStopher 2014年

我遇到了一些问题,但在主目录(“ public_html” Web目录上方的一个目录)中找到了罪魁祸首.htaccess文件。如果其他人也遇到同样的问题,请也在父目录中查找.htaccess(设置会级联)。
Wireblue 2014年

我有一个.htaccess文件,是从网络托管服务器提取的。它强制使用未在本地计算机上安装的PHP版本。因此,虚拟主机未正确执行PHP文件。
BrightIntelDusk

如果某些站点可以工作而另一些则不能,那么这几乎肯定是问题。Joomla .htaccess包含一个AddHandler,但WordPress没有。
彼得·伍斯特

这对我有用,只是从我的public / .htaccess文件中删除了这一行,并加载了索引。
PA-GW

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的文件中创建一个符号链接,指向存储在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
请注意,这仅在Linux(特别是Debian Linux)下有效。
Gwyneth Llewelyn'3

6

请查看您的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

这很有趣,但就我而言,它只输出整个PHP脚本,这次将其设置为HTML格式(与仅使用ASCII格式相反)–没用!这里的问题是PHP无法以某种方式正确运行,或者发送了错误的标头...
Gwyneth Llewelyn

请注意,最后一个AddType指令(在上面的示例中已被注释掉)使.phps文件以HTML精美打印。您的Apache配置是否有可能漂亮地打印了.php文件?
山姆·阿泽

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

4

如果您的.htaccess文件具有以下内容... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3 然后对其进行评论,然后再次尝试刷新它对我有用 ...


3

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

AddHandler x-mapp-php5.5  .php

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

谢谢大家 !!!


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页面。


噢,是的,这个棘手的CGI混蛋^^在将php从5.3也从dotdeb更新到5.4之后,也解决了我的问题。
Emii Khaos 2014年

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.

2

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

确保启用php7

sudo a2enmod php7

重新启动mysql服务和Apache

sudo systemctl restart mysql
sudo systemctl restart apache2

2

将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 / 系统设置下的Re-Check配置向导/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

1

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

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

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



1

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


1

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


1

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

结论

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

php_admin_value engine Off
IPCComTimeout 31

我不知道他们在做什么或如何到达那里,但是我的每个文件中都.conf没有。如果我删除这些线条和确保有一个符号链接/etc/apache2/sites-enabled/ -folder,那么它不下载的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 >>服务器>> Apache Webserver)中使用Virutal Server设置。
  • 在单个虚拟服务器上检查了配置(Virtualmin >>系统设置>>重新检查配置)...此步骤非常好,因为它告知Apache缺少哪个模块。之后,我可以启用它a2enmod [MODULE_NAME]。我通过谷歌搜索找到了模块名称。在进行验证的那一步之前,我必须激活大约6-8个模块-并且缓存用尽了几分钟,所以这样做是一个繁琐的步骤。
  • 最后,我找出了上面写的结论-连同符号链接-然后使它起作用。不过,我必须对VPS上的每个站点都进行检查。

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来解决了该问题。


0

如果以上方法均无效,

尝试注释掉该行

SetHandler ....

并使用重新启动Apache

/etc/init.d/httpd restart

它应该工作!



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

它显示正确。我认为这会帮助任何人。


0

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

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


0

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

  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off

0

当我从PHP 7.2升级到PHP 7.4时,我也遇到了同样的问题。通过执行以下操作:

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

    php_admin_value引擎关闭

并添加:

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

    a2dismod php7.2
    a2enmod php7.4

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

    SetHandler应用程序/ x-httpd-php
    php_admin_flag引擎已关闭


0

对于将近6年后(甚至更晚)从Google找到这篇文章的人,在使用UserDir模块2的同时,您可能会遇到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>

-1

如果您的.htaccess有这样的内容

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.