Apache 显示 PHP 代码而不是执行它
Posted
技术标签:
【中文标题】Apache 显示 PHP 代码而不是执行它【英文标题】:Apache shows PHP code instead of executing it 【发布时间】: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 不,我的整个脚本都在我的问题中 尝试简单的脚本:<?php echo "Hello world"; ?>
是否显示 Hello world?如果它显示代码,那么@RabNawaz 说您的服务器配置不正确!
只是再次显示代码:(
您从哪里访问您的 php 文件?请注意,为了让您的服务器执行 php 文件,您需要将文件放在正确的 Web 根目录中。并在您的网络浏览器中以http://localhost/
或http://127.0.0.1/
访问它
【参考方案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.0
、Considering 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.0
、Considering 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. 我已将其添加到相关的<Directory>
部分:
<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,我已经解决了。我的第一行正好是<FilesMatch ".+\.ph(ar|p|tml)$">
,包含它的文件是 /etc/apache2/mods-enabled/php7.3.conf【参考方案12】:
您可以删除您的 .htaceess 文件并让系统创建一个新的(空白或基本)文件。可能是您添加的某些行是不正确的语句,或者是内部的其他内容导致了问题。然后,您可以从旧的 .htaccess 文件中逐行添加,以查看导致问题的原因。
这对我有用。在我的情况下,告诉机器不要显示 php 扩展的行是问题(RewriteCond 和 RewriteRule)。我的旧 .htaccess 文件在共享服务器上运行良好,但当我切换到 VPS 时出现此问题。
【讨论】:
另外,如果你遇到了 CORS 的愚蠢行为:运行sudo a2enmod headers
和 sudo 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.so
和libphp7-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/<insert folder name here>/<insert file name>
即如果您创建的文件夹是“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 restart
或 service 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
变体,但这个绝对为我修复了它。
之后别忘了重启服务器。
【讨论】:
以上是关于Apache 显示 PHP 代码而不是执行它的主要内容,如果未能解决你的问题,请参考以下文章