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


107

我最近一直在尝试在计算机上安装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配置文件

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表示您的服务器配置不正确!

只需再次显示代码即可:(
imulsion

1
您从哪里访问您的php文件?请注意,为了由您的服务器执行php文件,您需要将文件放在正确的Web根目录中。和访问它在你的网页浏览器http://localhost/http://127.0.0.1/
易卜拉欣爱资哈尔阿马尔

Answers:


90

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

另外,请检查/var/log/apache2/error.log是否还有其他错误。


8
您是否运行过:a2enmod php5
Daniel Figueroa

6
我的apache目录中没有mods_enabled文件夹
imulsion

@imulsion在我的情况下是在/ etc / apache2 /下启用了mods –
Silveri

6
就我的php7而言,我必须这样做a2enmod php7.0,它解决了我的问题。花了整整一天以某种方式到达此职位!
罗夏(Rorschach)

3
没有文件叫phpmods-enabled,现在怎么办?这个答案并不能解释问题
黑色

59

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

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

通过添加--reinstallapt-get 为我工作。可能php模块/ apache安装很脏。
Glastis

这对我在Digital Ocean的Ubuntu 16.04服务器上
起作用。

这给了我以下错误:Considering conflict php5 for php7.0Considering conflict mpm_worker for mpm_prefork等等...,并且apache2重新启动失败
6

如果你Considering conflict php5 for php7.2/etc/apache2/mods-available和删除php5.*
西蒙Epskamp

39

对于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
我必须在OSX El Capitan上针对PHP 5.6进行此操作。(使用股票Apache,但自制php56)
rfay

1
也可以在Windows上运行(这意味着您不必在Windows上运行终端命令)感谢您为我节省了无尽的搜索。
che-azeh

从源安装时,此文件匹配是必需的。(config和make等为我启用了httpd.conf中的模块,但未添加此模块。)
user7296055

样本httpd.conf文件中有十亿条注释。谁能解释为什么没有一个适合PHP?这不是一个很少使用的东西。
Danial

@Danial httpd.apache.org/support.html有许多方法,你可以找到的文档,bug报告,并提出问题(如为什么没有在httpd.conf中使用PHP的一个理智的例子吗?)
RyanNerd

24

打开文件

/etc/apache2/httpd.conf

并改变

#LoadModule php5_module libexec/apache2/libphp5.so

进入

LoadModule php5_module libexec/apache2/libphp5.so

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


在我的情况下,该行以php7_module开始-否则对我有用!
b0rgBart3 '19


6

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


1
我的也差不多。我做了“ sudo apt-cache搜索^ libapache2 | grep php”,它找到了相关的软件包,然后安装了“ sudo apt-get install libapache2-mod-php”。libapache2-mod-php7.0已经安装。
VectorVortec

3

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

希望我能帮助某个人。o /〜丹尼尔


3

发布适用于我的情况以防万一,这是一个不寻常的情况。

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

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

在我的.htaccess文件中。

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


3

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

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

#以下命令:

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

2.评论了以下几行

在此处输入图片说明

3.重新启动服务器

$ sudo服务apache2重新启动

4享受:)


2

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

那对我有用。在我的情况下,告诉机器不显示php扩展名的行是问题(RewriteCondRewriteRule)。我的旧.htaccess文件在共享服务器上可以正常工作,但是当我切换到VPS时出现此问题。


同样,如果您遇到了CORS愚蠢问题,请运行:sudo a2enmod headerssudo a2enmod rewrite(不要忘记重新启动Apache)。
RyanNerd '16

2

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

a2dismod php7.0
systemctl restart apache2

并且php再次正确呈现。


1

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

1

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

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

就我而言,效果很好。


1

对我有用的是:

在活动的httpd.conf中,找到

<IfModule mime_module>
...
</IfModule>

它缺少以下内容

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

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


1

以上都不适用或对我没有帮助... PHP7,CentOS 6上的Apache Httpd 2.2

事实是,我在Apache之前安装了yum php(全部使用yum)...您必须做相反的事情:始终先安装Apache,然后再安装PHP,然后再运行...确实,您可能会丢失libphp7.so并且libphp7-zts.so/etc/httpd/modules/

无论如何,我都无需卸载PHP就可以恢复。我确实在/etc/httpd/conf/httpd.conf:中添加了魔术行,AddType application/x-httpd-php .php 然后运行:yum install php php-mysql


1

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

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

移至最底部并插入以下内容(全部插入):

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

Apache现在将使用PHP执行所有操作。如果您只有html和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

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

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

例:

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

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

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


0

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


0

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


0

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

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

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

localhost/LearnPhp/chapter1.php

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


0

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
Tony Adams

0

有时,如果您有php版本冲突,则会发生。要解决该问题,请按照以下步骤操作

步骤1:安装百胜餐饮清单| grep'php'

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

步骤2:yum删除**您的php版本**

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



0

我尝试了上述多种解决方案,但是在我们的方案中,解决方法是安装fpm-module。

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

百胜模块安装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重新启动

然后一切正常。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.