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

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

<?php phpinfo(); ?>

但是当我尝试用 http://127.0.0.1/phpinfo.php运行它时,它只显示源代码,而不是执行它。我使用的是 Apache2、 PHP5和 WindowsVista。

编辑行:

菲比尼:

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"
390497 次浏览

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

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

打开文件

/etc/apache2/httpd.conf

和改变

#LoadModule php5_module libexec/apache2/libphp5.so

进入

LoadModule php5_module libexec/apache2/libphp5.so

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

好吧,如果你已经尝试了上面或之前告诉你的(这可能是原因) ,它仍然显示代码,而不是执行它,那么有一件事你做错了,没有得到解决。 您用来访问 PHP 代码的 URL; 有些人试图通过拖动。将 php 文件输入网页浏览器。这是错误的做法,可能会导致这种问题。 如果你在 C://wamp/www 文件夹中保存了一个名为“ test.php”的文件,那么你必须这样访问这个文件: Localhost://test.php. 当您以这种方式访问它时,就会出现这种错误: localhost://wamp/www/test.php

希望我帮到了什么人 ~ Daniel

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

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

如果启用了模块 userdir 并且您的站点位于 userdir (~/public _ html)中,那么您必须检查/etc/apache2/mods-abled/php5.conf。 下面的部分使它工作(Ubuntu 14.10乌托邦) :

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

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

这招对我管用。在我的例子中(重写重写规则) ,告诉机器不要显示 php 扩展的行是个问题。我的旧 . htaccess文件在共享服务器上运行得很好,但是当我切换到 VPS 时出现了这个问题。

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

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

例如:

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

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

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

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

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

把它添加到/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/

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

我也有同样的问题。当我运行一个 php 文件时,网络浏览器会显示 php 代码,而不是执行它。我尝试了很多次: 卸载/重新安装 wampserver64,使用 PHP/Apache 设置/模块等。两天后: 我意识到当我试图在记事本 + + 中运行 php 文件时,我按下了 chrome 的默认组合“ ctrl + alt + shift + R”。它试图像这样执行我的 php 文件:”file///C:/wamp64/www/bla/bla。."在我的铬合金地址栏里。那是我的问题。我根据 配置 Notepad + + 在本地主机上运行 php?页做了修改。我的问题解决了。但是两天之后。.

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

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

对我来说没问题。

把对我有用的东西贴出来,以防万一,可以帮助以后的某个人,尽管这是一个不寻常的情况。

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

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

在我的.htaccess 文件中。

当尝试在本地运行我的站点时,将其放在那里会导致 php 代码被输出到浏览器。移除它解决了问题。

以管理员身份运行 Xampp (apache)。在 google chrome 中输入:

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

也就是说,如果你创建的文件夹是“ LearnPhp”,那么文件是“ Chapter1.php”,然后输入

localhost/LearnPhp/chapter1.php

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

对我有效的方法是:

在活动的 httpd.conf 中,查找

<IfModule mime_module>
...
</IfModule>

缺少以下几点

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

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

哇,这里有很多解决方案! 以下是我在 Ubuntu 16.04节目中所做的:

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

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

感谢这个帖子上的其他人的建议。按照上面提到的步骤,我发现 Apache 服务器无法在 /etc/apache2/mods-enabled中的 load文件中开始报告语法错误。结果是 php7.0和 php7.1都启用了。

a2dismod php7.0
systemctl restart apache2

并且 php 再次正确呈现。

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

事实上,我在安装 Apache 之前就安装了 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

有时候,如果有 PHP 版本冲突,就会发生这种情况 为了克服这一点,请遵循以下步骤

步骤1: 安装 Yum 列表 | grep‘ php’

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

步骤2: yum remove * * your php version * *

步骤3: 然后重新启动 apaphe/etc/init.d/httpd restartservice apache2 restart

Apache 显示 php 代码,而不是执行“问题修复”

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

# 以下命令:

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

2. 注释如下行

enter image description here

3. 重新启动服务器

$sudo 服务 apache2重新启动

4享受:)

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

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

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

我们在 php 之前安装了 httpd,这可能与问题有关,但为了解决这个问题,我们安装了以下软件:

Yum 模块安装 php: 7.2

这里安装了 php-fpm-7.2.11-4. module + el8.1.0 + 5443 + bc1aeb77.x86 _ 64. rpm 模块,然后通过以下方式启用:

Systemctl 激活——现在是 php-fpm

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

服务 httpd 重新启动

然后一切都成功了。

希望这能有所帮助,花的时间比想象的要长得多。

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

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

通过 sudo service apache2 restart重启 apache

在我使用 PHP7.3 Apache2.4 Ubuntu 18.04时,我必须执行:

$ a2enmod actions fastcgi alias proxy_fcgi

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的变体,但这一个肯定为我修复。

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

您的其他站点/子目录是否正常工作? 是否只有一个目录显示这种行为?

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


例如:

?php
phpinfo();
?>

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