Apache 显示 PHP 代码而不是执行它

Apache shows PHP code instead of executing it

提问人:imulsion 提问时间:8/27/2012 最后编辑:Communityimulsion 更新时间:11/15/2023 访问量:424770

问:

我最近一直在尝试在我的计算机上安装 PHP 和 Apache。几个小时后,它们就安装好了。我已经修改了httpd.conf和php.ini文件,就像大家说的那样。然后,我创建了一个简单的PHP脚本:

<?php phpinfo(); ?>

但是当我尝试使用它运行它时,它只显示源代码而不是执行它。我正在使用 Apache 2、PHP 5 和 Windows Vista。http://127.0.0.1/phpinfo.php

编辑行:

PHP的。INI:

short_open_tag = On

HTTPD。会议

LoadModule php5_module "C:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "C:/php"
PHP 阿帕奇

评论

0赞 8/27/2012
在 phpinfo.php 中,您是否添加了一些使 .php 文件可读的标题?
0赞 imulsion 8/27/2012
@Peteris不,我的整个剧本都在我的问题中
0赞 8/27/2012
尝试简单的脚本:它是否显示 Hello world?如果它显示代码,那么@RabNawaz怎么说你的服务器配置不正确!<?php echo "Hello world"; ?>
0赞 imulsion 8/27/2012
只是再次显示代码:(
1赞 Ibrahim Azhar Armar 8/27/2012
您从哪里访问您的 PHP 文件?请注意,为了通过您的服务器执行PHP文件,您需要将文件放在正确的Web根目录中。并在您的网络浏览器中作为或http://localhost/http://127.0.0.1/

答:

112赞 Daniel Figueroa 8/27/2012 #1

您必须启用 php!检查 Apache 目录中的文件夹(默认:),看看是否找到名为 .我不记得扩展名,但我认为是.mods-enabled/etc/apache2/php.so

此外,请检查是否有任何其他错误。/var/log/apache2/error.log

评论

12赞 Daniel Figueroa 8/27/2012
你运行过: A2Enmod PHP5
8赞 imulsion 8/27/2012
我的 Apache 目录中没有mods_enabled文件夹
9赞 Pankaj Sejwal 9/17/2016
就我而言,php7 我必须这样做,它解决了我的问题。花了一整天的时间才以某种方式到达这个帖子!a2enmod php7.0
12赞 Black 3/7/2017
没有文件调用,现在怎么办?这个答案并不能解释一些事情phpmods-enabled
2赞 mrid 6/14/2018
我只看到 mods-enabled 目录中的 and 文件。运行给我以下错误:、 等......和 apache2 重启失败.conf.loada2enmod php7.0Considering conflict php5 for php7.0Considering conflict mpm_worker for mpm_prefork
27赞 inigo333 5/29/2013 #2

打开文件

/etc/apache2/httpd.conf

和改变

#LoadModule php5_module libexec/apache2/libphp5.so

LoadModule php5_module libexec/apache2/libphp5.so

因此,只需将 PHP 模块加载到httpd.conf

评论

0赞 b0rgBart3 2/24/2019
就我而言,该行以 php7_module 开头 - 但除此之外,这对我有用!
3赞 DAniel 7/23/2014 #3

好吧,如果您已经尝试了上面或之前被告知的内容(这可能是原因),并且它仍然显示代码而不是执行它,那么您做错了一件事,没有得到解决。 您用于访问 php 代码的 url;有些人试图通过将 .php 文件拖到 Web 浏览器中来执行他们的 PHP 代码。这是错误的做法,可能会导致此类问题。 如果您已将文件保存为“test.php”,则必须在 C://wamp/www 文件夹中访问此文件: localhost://test.php。 当您以这种方式访问它时,会出现这种错误: localhost://wamp/www/test.php

8赞 Pawel 12/1/2014 #4

我发现这可以解决我的相关问题。我将其添加到相关部分:<Directory>

<IfModule mod_php5.c>
    php_admin_flag engine on
</IfModule>
1赞 Cie6ohpa 3/8/2015 #5

如果模块 userdir 已启用,并且您的站点位于 userdir (~/public_html) 中,则必须检查 /etc/apache2/mods-enabled/php5.conf。 以下部分使其工作(在 Ubuntu 14.10 utopic 上):

# Running PHP scripts in user directories is disabled by default
# 
# 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.

# <IfModule mod_userdir.c>
#     <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
# </IfModule>
2赞 bokistack 9/16/2015 #6

您可以删除 .htaccess 文件,让系统创建一个新的(空白或基本)文件。可能是您添加的某些行是不正确的陈述,或者里面的其他东西可能会导致问题。然后,您可以从旧的 .htaccess 文件中逐行添加,以查看导致问题的原因。

这对我有用。在我的情况下,告诉机器不要显示 php 扩展的行是有问题的(RewriteCondRewriteRule)。我的旧 .htaccess 文件在共享服务器上运行良好,但当我切换到 VPS 时出现了这个问题。

评论

0赞 RyanNerd 6/1/2016
此外,如果您遇到 CORS 的愚蠢行为:运行并(不要忘记重新启动 Apache)。sudo a2enmod headerssudo a2enmod rewrite
2赞 maidenastraea 9/20/2015 #7

在 MAMP 中运行 _POST 美元时,这也发生在我身上。我所有的 .ini 和 httpd 文件都设置正确。如果您正在进行表单处理,并且您有一个 html 文档并将信息发布到运行 $POST 的 php 表单处理程序,请确保您通过服务器从 localhost 运行 html 文件,而不仅仅是在本地运行。

这是我运行 html 文档的快捷方式,只需单击我目录中的 html 文件并在我的 Web 浏览器中启动,而实际上要检查您的表单中是否正在处理 php,您必须通过服务器运行您的 html。一个非常简单的协议,我忽略了。

例:

错:file:///Applications/MAMP/htdocs/form/form.html

右:http://localhost:your port number/form/form.html

现在,一旦单击提交按钮,就应该处理php

7赞 Simon Mohoalali 5/12/2016 #8

一个对我有用的不同答案。是不是,要安装[sudo] apt-get install libapache2-mod-php5.X

评论

1赞 VectorVortec 9/16/2018
我的也差不多。我做了“sudo apt-cache search ^libapache2 |grep php“,然后安装”sudo apt-get install libapache2-mod-php”。libapache2-mod-php7.0 已安装。
54赞 RyanNerd 6/1/2016 #9

对于 PHP 7(可能也适用于以前的版本),但我必须这样做:

将其添加到 /etc/apache2/apache2.conf 的底部

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

从终端运行以下命令:

sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7

然后别忘了重启 Apache,这样它就知道你更改了一些东西:

sudo service apache2 restart

以下是以下内容的摘要: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/

评论

3赞 rfay 8/12/2016
我必须在 OSX El Capitan 上为 PHP 5.6 执行此操作。(使用库存 apache,但自制 php56)
1赞 Cedric Ipkiss 4/5/2017
也适用于 Windows(这意味着您不必在 Windows 上运行终端命令)感谢您为我节省了无休止的搜索。
0赞 user7296055 11/29/2017
从源代码安装时,此 Filesmatch 是必需的。(config 和 make 等为我启用了 httpd.conf 中的模块,但没有添加这个。
0赞 Danial 6/12/2018
示例 httpd.conf 文件中有 10 亿条评论;谁能解释为什么没有PHP的?这不是一个很少使用的东西。
0赞 RyanNerd 6/13/2018
@Danial httpd.apache.org/support.html 有许多方法可以在其中查找文档、报告错误和提出问题(例如为什么在 httpd.conf 中没有使用 PHP 的合理示例?
0赞 Torsten Knodt 7/10/2016 #10

我遇到了同样的问题,由模块的 Debian/Ubuntu 默认配置引起。它包含整个 /usr/share,这导致 php 源代码显示在浏览器中。停用是临时解决方案。suphpsuPHP_Engine offa2dismod suphp

0赞 mechanic 10/27/2016 #11

我也有同样的问题。当我运行一个 php 文件时,Web 浏览器向我显示 php 代码而不是执行它。我已经尝试了很多次:卸载/重新安装 wampserver64,解决 PHP/Apache 设置/模块等。2 天后:当我尝试通过按 chrome 的默认组合“ctrl + alt + shift + R”在记事本 ++ 中运行 php 文件时,我意识到了这一点。它试图在我的 chrome 地址栏中执行我的 php 文件,例如:“file///C:/wamp64/www/bla/bla..”。那是我的问题。我根据页面进行了更改 配置 Notepad++ 以在 localhost 上运行 php?。我的问题解决了。但是2天后..

3赞 Hasan Baig 12/6/2016 #12

如果您是 ubuntu 用户,安装 apache 后必须在全新安装中运行以下命令

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

就我而言,工作正常。

评论

1赞 Swaleh Matongwa 12/8/2021
就我而言,它是在php7.0上,我必须运行sudo apt-get install php7.0 libapache2-mod-php7.0 php7.0-mcrypt
3赞 evanmcd 12/22/2016 #13

发布对我有用的东西,以防万一帮助某人,尽管这是一个不寻常的情况。

我设置了一个处理程序来强制我的虚拟主机使用比默认版本更高的 php。有 5.1,但我想要 5.6,所以我有这个:

<FilesMatch \.php$>
    SetHandler php56-cgi
</FilesMatch>

在我的.htaccess文件中。

当尝试在本地运行我的网站时,在那里进行会导致 php 代码输出到浏览器。删除它解决了问题。

0赞 Theorder 3/16/2017 #14

以管理员身份运行 Xampp (apache)。在谷歌浏览器中输入:

localhost/<insert folder name here>/<insert file name>

即,如果您创建的文件夹是“LearnPhp”,文件是“chapter1.php”,则键入

localhost/LearnPhp/chapter1.php

我在htdocs文件夹的xampp文件夹中创建了这个文件夹,该文件夹是在下载xampp时创建的。

2赞 paul 4/8/2017 #15

什么对我有用:

在活动的 httpd.conf 中,找到

<IfModule mime_module>
...
</IfModule>

它缺少以下内容

AddType application/x-httpd-php .php
AddHandler application/x-httpd-php .php

重新启动 apache 后,.php 文件将被正确解析。

108赞 helmy 4/29/2017 #16

哇,这里有很多解决方案!这是我在 Ubuntu 16.04 上所做的:

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart

评论

1赞 Glastis 6/28/2017
通过添加到apt-get为我工作。可能php模块/ apache安装很脏。--reinstall
0赞 Sushant Bhargav 11/15/2017
这在 Digital Ocean 的 Ubuntu 16.04 服务器上对我有用谢谢
0赞 mrid 6/14/2018
这给了我以下错误:、 等......和 apache2 重启失败Considering conflict php5 for php7.0Considering conflict mpm_worker for mpm_prefork
0赞 Simon Epskamp 5/24/2019
如果得到,请转到并删除Considering conflict php5 for php7.2/etc/apache2/mods-availablephp5.*
1赞 Korhan Ozturk 4/14/2021
这对我有用(Ubuntu 20.04.2),无需执行第二个(a2enmod)命令
0赞 mrDinkelman 1/17/2018 #17

Debian 9 解决方案:

touch /etc/apache2/conf-available/php.conf 

添加到文件下一行:

<IfModule mod_php5.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>
<IfModule mod_php.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>

然后运行:

a2enconf php && service apache2 restart

评论

0赞 Tony Adams 2/10/2019
这对我有用,但最初不是。我正在用户目录中运行 Web 内容,默认情况下处于禁用状态。要启用此功能,请参阅中的最后一节/etc/apache2/mods-available/php7.2.conf
4赞 djnz0feh 2/22/2018 #18

感谢此线程上的其他人的建议。按照上述步骤,我发现 apache 服务器无法开始报告 中的文件中的语法错误。事实证明,php7.0 和 php7.1 都启用了。load/etc/apache2/mods-enabled

a2dismod php7.0
systemctl restart apache2

PHP 再次正确呈现。

1赞 Bernard Hauzeur 7/31/2018 #19

以上均不适用于我或对我有用......CentOS 6 上的 PHP7、Apache Httpd 2.2

事实是,我在 Apache 之前安装了(全部带有 yum)php ...你必须做相反的事情:总是先安装Apache,然后安装PHP,然后它就可以工作了...... 事实上,你很可能失踪了libphp7.solibphp7-zts.so/etc/httpd/modules/

无论如何,我都可以在不卸载PHP的情况下恢复。我确实在以下位置添加了魔术行: 然后运行:/etc/httpd/conf/httpd.confAddType application/x-httpd-php .phpyum install php php-mysql

0赞 sachin_ur 8/28/2018 #20

有时,如果您遇到 php 版本冲突,就会发生这种情况 要克服这个问题,请按照以下步骤操作

第 1 步:已安装 Yum 列表 |grep 'php'

如果您有多个版本的 PHP,例如 PHP 5.6 和 PHP 7.0,则会发生这种混淆

第 2 步:百胜取用 **你的 php 版本 **

第 3 步:然后重新启动 apapche 或/etc/init.d/httpd restartservice apache2 restart

7赞 Matthew Farrell 6/28/2019 #21

Apache 显示 php 代码而不是执行 问题已修复

1. 打开php5.6 conf或php7.x conf

# 以下命令:

$ sudo vi /etc/apache2/mods-enabled/php5.6.conf

2. 评论以下几行

enter image description here

3. 重新启动服务器

$ sudo 服务 apache2 重启

4 享受:)

0赞 Kemal Atik 12/9/2019 #22

这个解决方案对我有用。我清除了 apache2 并重新安装。它发生在清除和安装之后。如果是第一次安装,则不会遇到此问题。

3赞 Adam Winter 1/23/2020 #23

对于 PHP7 和 Apache2.4,您需要做的就是:

sudo vim /etc/httpd/conf/httpd.conf

转到最底部并插入以下内容(全部单独):

<FilesMatch "\.*">
SetHandler application/x-httpd-php
</FilesMatch>

然后,重新启动 Apache 以加载新配置:

sudo service httpd restart

Apache 现在将使用 PHP 执行所有 HTTP/S 请求。如果您只有 html、css 和 php 文件,那么这对您来说很好。如果您正在运行其他语言,则需要根据您的情况定制匹配的文件。我已经用phpMyAdmin测试了它,它工作正常。

所有这些人在这里谈论的其他东西对我来说都不是必需的。当我把“AddType Application.....”时在正确的位置,Apache只是告诉我该模块已经加载并跳过了它。

更多信息可以在这里找到: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

我的安装如下:

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

如果你还没有,你也应该阅读这篇文章: https://httpd.apache.org/docs/current/howto/htaccess.html#when

评论

0赞 Elikill58 1/17/2022
我不存在该文件夹/etc/httpd
0赞 Adam Winter 1/18/2022
您是在 Linux 环境中吗?如果你的操作系统是Linux,并且你运行的是Apache 2.4,那么它应该在那里。
0赞 Elikill58 1/18/2022
是的,我不知道我是否使用 2.4,但我使用 apache2。我应该安装httpd服务吗?(Apache 工作正常)
0赞 Adam Winter 1/18/2022
您需要单独查找/排除 httpd.conf 文件的位置问题。这是一个与这里讨论的问题不同的问题。
1赞 Bren1818 3/10/2020 #24

我尝试了上面的许多解决方案,但是我们场景中的修复方法是安装 fpm-module。

我们在 php 之前安装了 httpd,这可能与该问题有关,但为了解决此问题,我们安装了以下内容:

yum 模块安装 php:7.2

这安装了 php-fpm-7.2.11-4.module+el8.1.0+5443+bc1aeb77.x86_64.rpm 模块,然后我们通过以下方式启用该模块:

systemctl enable --now php-fpm

从那时起,我们将 /etc/httpd/conf.d/php.conf 保留为默认值并重新启动 httpd

服务 httpd 重新启动

然后一切都奏效了。

希望这会有所帮助,花了比它应该弄清楚的时间更长的时间。

4赞 Imran Zahoor 8/16/2020 #25

将以下配置添加到/etc/apache2/apache2.conf

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

并重新启动过孔apachesudo service apache2 restart

评论

1赞 Maciej Łoziński 12/9/2020
谢谢!多亏了本指南,我才弄清楚了。我的第 1 行正好是 ,包含它的文件是 /etc/apache2/mods-enabled/php7.3.conf<FilesMatch ".+\.ph(ar|p|tml)$">
0赞 Vasili Pascal 8/24/2020 #26

就我而言,使用 PHP7.3 Apache2.4 Ubuntu 18.04,我必须执行:

$ a2enmod actions fastcgi alias proxy_fcgi
-1赞 DazBaldwin 5/14/2021 #27

Centos 7、PHP 8、Apache 2

我最近升级了一台 centos 服务器以使用 php 8。

升级后,php停止工作,apache开始以文本形式为我提供php代码。

在花了很长时间寻找哪个配置设置没有更新后,我追踪到了这个:

/etc/httpd/conf.d

<IfModule  mod_php7.c>

需要更改为:

<IfModule  mod_php.c>

您可能会在其他地方看到可能会更新为变体的检查,但这个绝对为我修复了它。mod_php7mod_php

之后不要忘记重新启动服务器。

0赞 schweigerson 11/20/2022 #28

您的其他站点/子目录是否有效?是否只是一个显示此行为的目录?

然后检查索引 .php 中的语法错误。如果您错过了 PHP 文件中的第一个字符:“<?php”中的“<”,那么浏览器会显示文件的其余部分,因为它是文本文件。


例:

?php
phpinfo(); 
?> 

然后浏览器只显示 “?php phpinfo(); ?>” 而不是 phpinfo() 的输出。

0赞 CSCProgrammer 11/15/2023 #29

如果您使用的是 termux 和 apachectl 命令,抱怨找不到 libphp.so 或其他共享对象文件,答案可能是 rf 注释删除 usr ($HOME) 目录,当您重新打开 termux 时,它将重新安装该目录,或者您可以执行 apt-file 搜索 shared_object_filename.so 以找到丢失的 libphp.so 文件,并将 ln -s 添加到 Apache 正在寻找它的位置。另外,当您编辑 httpd.conf 以包含 mod PHP 时,该模块的名称和路径很重要。注意:只需根据 .so-named 模块版本将模块名称从 PHP 7 模块更改为 PHP 模块即可解决问题