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

Posted

技术标签:

【中文标题】Apache 显示 PHP 代码而不是执行它【英文标题】:Apache shows PHP code instead of executing it 【发布时间】:2012-08-21 22:51:25 【问题描述】:

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

<?php phpinfo(); ?>

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

编辑行:

PHP.INI:

short_open_tag = On

HTTPD.CONF

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

【问题讨论】:

在 phpinfo.php 中是否添加了一些头文件,使 .php 文件可读? @Peteris 不,我的整个脚本都在我的问题中 尝试简单的脚本:&lt;?php echo "Hello world"; ?&gt; 是否显示 Hello world?如果它显示代码,那么@RabNawaz 说您的服务器配置不正确! 只是再次显示代码:( 您从哪里访问您的 php 文件?请注意,为了让您的服务器执行 php 文件,您需要将文件放在正确的 Web 根目录中。并在您的网络浏览器中以http://localhost/http://127.0.0.1/ 访问它 【参考方案1】:

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_php7 检查可能会更新为 mod_php 变体,但这个绝对为我修复了它。

之后别忘了重启服务器。

【讨论】:

【参考方案2】:

对于 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

【讨论】:

文件夹 /etc/httpd 对我来说不存在 你是在Linux环境下吗?如果您的操作系统是 Linux 并且您正在运行 Apache 2.4,那么它应该在那里。 是的,我不知道我是否使用 2.4,但我使用的是 apache2。我应该安装 httpd 服务吗? (阿帕奇工作正常) 您需要单独查找/排除 httpd.conf 文件的位置。这是与此处解决的问题不同的问题。【参考方案3】:

在我使用 PHP7.3 Apache2.4 Ubuntu 18.04 的情况下,我必须执行:

$ a2enmod actions fastcgi alias proxy_fcgi

【讨论】:

【参考方案4】:

/etc/apache2/apache2.conf添加如下配置

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

然后通过sudo service apache2 restart重启apache

【讨论】:

谢谢!感谢this guide,我已经解决了。我的第一行正好是&lt;FilesMatch ".+\.ph(ar|p|tml)$"&gt;,包含它的文件是 /etc/apache2/mods-enabled/php7.3.conf【参考方案5】:

我尝试了上面的一些解决方案,但我们的方案中的修复是安装 fpm 模块。

我们在 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 重启

然后一切正常。

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

【讨论】:

【参考方案6】:

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

同时检查/var/log/apache2/error.log,看看是否还有其他错误。

【讨论】:

你跑了吗:a2enmod php5 我的 apache 目录中没有 mods_enabled 文件夹 对于 php7,我必须这样做 a2enmod php7.0,它解决了我的问题。不知何故花了一整天的时间才找到这篇文章! mods-enabled 中没有名为php 的文件,现在怎么办?这个答案没有解释什么 我只在 mods-enabled 目录中看到 .conf.load 文件。运行a2enmod php7.0 给我以下错误:Considering conflict php5 for php7.0Considering conflict mpm_worker for mpm_prefork 等......并且 apache2 重启失败【参考方案7】:

这个solution 为我工作。我清除了 apache2 并重新安装。它发生在清除和安装之后。如果是第一次安装,就不会遇到这个问题。

【讨论】:

【参考方案8】:

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

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

#以下命令:

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

2。评论以下几行

3。重启服务器

$ sudo service apache2 restart

4 享受 :)

【讨论】:

【参考方案9】:

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

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

如果您有多个版本的 php,例如 php 5.6 和 php 7.0,则会发生这种冲突

第2步:yum删除**你的php版本**

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

【讨论】:

【参考方案10】:

以上都不适用于我... PHP7, Apache Httpd 2.2 on CentOS 6

事实是,我在 Apache 之前安装了(全部使用 yum)php……你必须做相反的事情:总是先安装 Apache,然后是 PHP,然后它就可以工作了…… 实际上,您可能在/etc/httpd/modules/ 中缺少libphp7.solibphp7-zts.so

无论如何我都能够在不卸载 PHP 的情况下恢复。我确实在/etc/httpd/conf/httpd.conf:AddType application/x-httpd-php .php 中添加了魔法线 然后运行:yum install php php-mysql

【讨论】:

【参考方案11】:

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

a2dismod php7.0
systemctl restart apache2

php 又被正确渲染了。

【讨论】:

【参考方案12】:

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

【讨论】:

这对我有用,但最初不是。我在用户目录中运行 web 内容,默认情况下禁用。要启用它,请参阅/etc/apache2/mods-available/php7.2.conf 中的最后一部分【参考方案13】:

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

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

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

在我的 .htaccess 文件中。

当尝试在本地运行我的网站时,将其放入其中会导致 php 代码输出到浏览器。删除它解决了这个问题。

【讨论】:

【参考方案14】:

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

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

【讨论】:

通过将--reinstall 添加到 apt-get 为我工作。可能php模块/apache安装很脏。 这在 Digital Ocean 的 Ubuntu 16.04 服务器上对我有用,谢谢 这给了我以下错误:Considering conflict php5 for php7.0Considering conflict mpm_worker for mpm_prefork 等......并且 apache2 重启失败 如果你得到Considering conflict php5 for php7.2/etc/apache2/mods-available 并删除php5.* 这对我有用(Ubuntu 20.04.2),无需执行第二个(a2enmod)命令【参考方案15】:

什么对我有用:

在活动的 httpd.conf 中,找到

<IfModule mime_module>
...
</IfModule>

缺少以下内容

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

重启apache后,.php文件解析正确。

【讨论】:

【参考方案16】:

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

localhost/&lt;insert folder name here&gt;/&lt;insert file name&gt;

即如果您创建的文件夹是“LearnPhp”,文件是“chapter1.php”然后输入

localhost/LearnPhp/chapter1.php

我在下载 xampp 时创建的 htdocs 文件夹中的 xampp 文件夹中创建了此文件夹。

【讨论】:

【参考方案17】:

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

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

在我的情况下工作正常。

【讨论】:

就我而言,它是在 php7.0 上,我必须运行 sudo apt-get install php7.0 libapache2-mod-php7.0 php7.0-mcrypt【参考方案18】:

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

【讨论】:

【参考方案19】:

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

【讨论】:

【参考方案20】:

对于 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/的摘要

【讨论】:

我必须在 OSX El Capitan 上为 PHP 5.6 执行此操作。 (使用股票 apache,但自制 php56) 也可以在 Windows 上运行(这意味着您不必在 Windows 上运行终端命令)感谢您为我节省了无休止的搜索。 从源安装时,需要此文件匹配。 (config和make等为我启用了httpd.conf中的模块,但没有添加这个。) 示例 httpd.conf 文件中有十亿个 cmets;谁能解释为什么没有一个用于 php 的?这不是一个很少使用的东西。 @Danial httpd.apache.org/support.html 有许多方法可以让您查找文档、报告错误和提出问题(例如为什么在 httpd.conf 中没有使用 PHP 的合理示例?) 【参考方案21】:

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

【讨论】:

我的也是类似的。我做了“sudo apt-cache search ^libapache2 | grep php”,它找到了相关的包,然后安装了“sudo apt-get install libapache2-mod-php”。 libapache2-mod-php7.0 已经安装。【参考方案22】:

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

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

例子:

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

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

现在应该在您单击提交按钮后处理 php

【讨论】:

【参考方案23】:

您可以删除您的 .htaceess 文件并让系统创建一个新的(空白或基本)文件。可能是您添加的某些行是不正确的语句,或者是内部的其他内容导致了问题。然后,您可以从旧的 .htaccess 文件中逐行添加,以查看导致问题的原因。

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

【讨论】:

另外,如果你遇到了 CORS 的愚蠢行为:运行 sudo a2enmod headerssudo a2enmod rewrite(不要忘记重新启动 Apache)。【参考方案24】:

如果模块 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>

【讨论】:

【参考方案25】:

I found this to solve my related problem. 我已将其添加到相关的&lt;Directory&gt; 部分:

<IfModule mod_php5.c>
    php_admin_flag engine on
</IfModule>

【讨论】:

【参考方案26】:

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

希望我能帮助到那里的人。 o/ ~丹尼尔

【讨论】:

【参考方案27】:

打开文件

/etc/apache2/httpd.conf

改变

#LoadModule php5_module libexec/apache2/libphp5.so

进入

LoadModule php5_module libexec/apache2/libphp5.so

所以只需取消注释 httpd.conf 中的 PHP 模块加载

【讨论】:

在我的情况下,该行以 php7_module 开头 - 但否则这对我有用!

以上是关于Apache 显示 PHP 代码而不是执行它的主要内容,如果未能解决你的问题,请参考以下文章

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

NGINX 显示脚本代码而不是执行

如何在 PHP 错误上设置 Apache HTTP 503 错误代码而不是 HTTP 500

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

Php包含显示代码

apache 不执行PHP,显示代码