【问题标题】:Apache shows PHP code instead of executing itApache 显示 PHP 代码而不是执行它
【发布时间】:2021-07-02 16:13:46
【问题描述】:

我最近一直在尝试在我的计算机上安装 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/ 访问它

标签: php apache


【解决方案1】:

您必须启用 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 的目录中看到 .conf.load 文件。运行a2enmod php7.0 给我以下错误:Considering conflict php5 for php7.0Considering conflict mpm_worker for mpm_prefork 等......并且 apache2 重启失败
【解决方案2】:

哇,这里有很多解决方案!这是我在 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)命令
【解决方案3】:

对于 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 的合理示例?)
【解决方案4】:

打开文件

/etc/apache2/httpd.conf

改变

#LoadModule php5_module libexec/apache2/libphp5.so

进入

LoadModule php5_module libexec/apache2/libphp5.so

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

【讨论】:

  • 在我的情况下,该行以 php7_module 开头 - 但否则这对我有用!
【解决方案5】:

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

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

【讨论】:

    【解决方案6】:

    对我有用的不同答案。就是这样,安装[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 已经安装。
    【解决方案7】:

    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 享受 :)

    【讨论】:

      【解决方案8】:

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

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

      【讨论】:

        【解决方案9】:

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

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

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

        在我的 .htaccess 文件中。

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

        【讨论】:

          【解决方案10】:

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

          a2dismod php7.0
          systemctl restart apache2
          

          php 又被正确渲染了。

          【讨论】:

            【解决方案11】:

            /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
            【解决方案12】:

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

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

            【讨论】:

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

            在 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

            【讨论】:

              【解决方案14】:

              如果你是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
              【解决方案15】:

              对于 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 文件的位置。这是与此处解决的问题不同的问题。
              【解决方案16】:

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

              【讨论】:

                【解决方案17】:

                什么对我有用:

                在活动的 httpd.conf 中,找到

                <IfModule mime_module>
                ...
                </IfModule>
                

                缺少以下内容

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

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

                【讨论】:

                  【解决方案18】:

                  以上都不适用于我... 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

                  【讨论】:

                    【解决方案19】:

                    我尝试了上面的一些解决方案,但我们的方案中的修复是安装 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 重启

                    然后一切正常。

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

                    【讨论】:

                      【解决方案20】:

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

                      【讨论】:

                        【解决方案21】:

                        我遇到了同样的问题。当我运行一个 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天后..

                        【讨论】:

                          【解决方案22】:

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

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

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

                          localhost/LearnPhp/chapter1.php

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

                          【讨论】:

                            【解决方案23】:

                            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 中的最后一部分
                            【解决方案24】:

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

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

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

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

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

                            【讨论】:

                              【解决方案25】:

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

                              【讨论】:

                                【解决方案26】:

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

                                $ a2enmod actions fastcgi alias proxy_fcgi
                                

                                【讨论】:

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

                                  之后别忘了重启服务器。

                                  【讨论】:

                                    猜你喜欢
                                    相关资源
                                    最近更新 更多