未执行PHP代码,而是在页面上显示代码


319

我正在尝试在项目上执行一些PHP代码(使用Dreamweaver),但是该代码未在运行。

当我检查源代码时,PHP代码显示为HTML标记(我可以在源代码中看到它)。Apache正常运行(我正在使用XAMPP),PHP页面已正确打开,但PHP代码未执行。

有人对正在发生的事情有建议吗?

注意:该文件已被命名为filename.php

编辑: 代码..:

<?
include_once("/code/configs.php");
?>

印刷品


44
您使用的是短标签<?而不是<?php
Dan Grossman

28
永远不要使用短标签。(<?)。它们已被弃用,在很多地方并没有真正起作用,否则完全没有必要。保存三个击键不是使代码可能在其可能运行的一半服务器上失败的有效理由。
mopsyd 2015年

10
@mopsyd在哪里说不赞成使用短标签?请注意,短标记短回声标记不同,并且自PHP 5.4起默认支持短回声标记,无论short_open_tag设置如何。
凯尔·安德森

5
我知道短标签不是短回显标签,这就是为什么我在评论中指定了我正在谈论的内容。在撰写本文时,短标记已标记为弃用php 6版本,尽管此后显然已经改变。问题仍然存在,许多服务器都禁用了它们,这使代码的可移植性大大降低。这不适用于短的回显标记(<?=),无论服务器设置如何,该标记都应在php 5.4+上正常运行。
mopsyd

3
愚蠢地谈论短标签。长标签很烂,而且很难看。我十年来从未遇到过PHP编程问题。他们几乎从来都不是问题
Danial 2016年

Answers:


417

听起来您的配置有问题,您可以检查以下几件事:

  1. 确保PHP已安装并正确运行。这听起来可能很愚蠢,但您永远不会知道。一种简单的检查方法是运行php -v,查看是否返回版本信息或任何错误。

  2. 确保PHP模块在Apache的httpd.conf中列出且未注释。这应该类似于LoadModule php5_module "c:/php/php5apache2_2.dll"文件中的内容。搜索LoadModule php,并确保没有评论(;前面)。

  3. 确保Apache的httpd.conf文件中包含PHP MIME类型。这应该是这样的AddType application/x-httpd-php .php。这告诉Apache将.php文件作为PHP 运行。搜索AddType,然后确保有一个PHP条目,并且该条目未注释

  4. 确保您的文件具有 .php扩展名,或第3点在MIME定义中指定的任何扩展名,否则它将不会作为PHP执行。

  5. 确保您未在PHP文件()中 使用短标签,默认情况下未在所有服务器上启用短标签,不建议使用它们。使用代替(或在php.ini中启用简短标记<?<?phpshort_open_tag=On,如果你有依赖于它们的代码)。

  6. 确保您正在使用URL http://localhost/file.php而不是通过本地文件访问来通过Web服务器访问文件file://localhost/www/file.php

最后,检查PHP手册以获取更多设置提示


14
不知道为什么,但是PHP 5.3.15的安装程序没有添加line AddType application/x-httpd-php .php。非常感谢!!
MatuDuke

7
@shmeeps:您在哪里看到短标签已被弃用?我已经进行了一些搜索,只能找到针对他们的建议,关于弃用一事无成。授予要分发的应用程序,最好在主机服务器未启用它们的情况下使用<?php,但对于完全控制服务器的应用程序,则不要使用看到任何不使用它们的理由。
ClarkeyBoy

3
6号点对我有用。.本地访问不使用apache服务器
KawaiKx 2014年

6
第二点为我安全工作apt-get purge apache2; apt-get install apache2 libapache-mod-php5
ulkas 2014年

1
@full_prog_full尝试上传.php带有内容扩展名的文件,<?php echo("Success"); ?>并查看是否通过Web浏览器访问该文件是否导致显示“成功”而没有关联的PHP代码。
shmeeps

61

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart

24
虽然这个代码片断可以解决的问题,包括解释如何为什么这解决了问题真的会有助于提高你的文章的质量。请记住,您将来会为读者回答问题,而不仅仅是现在问的人!请编辑您的答案以添加说明,并指出适用的限制和假设。
Toby Speight'2

4
这个答案与linux相关,topicstarter显然是在使用Windows。
雷蒙德·尼兰

3
@RaymondNijland是正确的,但这是规范的,我发现了这个问题,经过一个多小时的故障排除,它为我节省了时间。

方式和原因:当PHP7在make脚本中未配置默认的快速CGI服务时,会发生这种情况。sudo a2enmod proxy_fcgi setenvif创建三个新的mods /mods-available/proxy.conf proxy_fcgi.load proxy.load同样,sudo a2enconf php7.0-fpm创建一个配置文件/conf-available/php7.0-fpm.conf。完成后,Apache2随后可以将PHP7模块作为快速CGI服务运行。
Talvi Watia '17

33

我在Ubuntu上运行Apache,但我的问题是该/etc/apache2/mods-available/php5.conf文件丢失了:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

我重新添加了它,php正确解析了php文件。


31

对于php 7用户的注释,请将其添加到您的httpd.conf文件中:

# PHP 7 specific configuration
<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>

4
只是为了帮助其他人解决这个问题。该httpd.conf文件位于/etc/apache2/httpd.conf如果您使用的是Ubuntu,则它将apache2.conf在同一目录中,需要针对PHP7进行修改。
艾哈迈德·萨加瓦拉'18

23

我发现了另一个导致此问题的问题,并已解决。我不小心将脚本保存为UTF-16编码形式。<?php默认情况下,PHP5似乎无法识别16位编码的标记。


18

我发布此答案是因为我的Virtualmin / Webmin管理界面认为禁用PHP引擎是个好主意。花了我一段时间才找到解决方案,所以我想与大家分享一下:

另外,请确保检查与该特定主机或虚拟主机相关的网站配置文件中是否没有任何php_admin_value可以关闭PHP,例如:

php_admin_value engine Off

如有疑问,请评论...

# php_admin_value engine Off

并重新启动您的Web服务器。


1
这些配置设置到底在哪里?
cronoklee

2
@cronoklee在httpd.conf的vHost设置中。对于现有主机,您需要在webmin中编辑apache配置。对于将来的主机,请转至virtualmin>服务器模板> apache网站。无论哪种方式,它都不如fastcgi(virtualmin的默认值)安全。因此正确的方法应该是对fcgi为何不起作用进行故障排除,例如,它可能是由文件权限引起的。
喜怒无常的

如果您使用的是Apache版本不具备的httpd.conf,看看在/etc/apache2/mods-enabled/php7.confphp5.conf
山姆Malayek

如果对某个配置设置的位置有疑问,可以始终使用grep来查找所需的内容,例如(在本例中)键入:sudo grep php_admin_value /etc/* -R
Henry van Megen,

16

您只是在浏览器中打开php文件。您必须使用localhost网址打开它。如果您直接从目录打开文件,则在任何情况下都不会执行php代码。

使用:http://locahost/index.phphttp:127.0.0.1/index.php

启用php短代码。在您的情况下,您使用的<?是php的短代码<?php。默认情况下,禁用PHP短代码。

也可以使用:sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt如果您是ubuntu用户。


1
当我仅包含文件时,为什么需要mcrypt?您应该注意到,这个问题已经很久了,简短标签问题也被提及了16次,也是我问题的最高注释。

1
我只是分享我的解决方案,我也遇到了同样的错误,执行了mcrypt的此命令后,我的问题解决了。您也可以尝试。
哈桑·贝格

默认情况下,启用了php短代码。short_open_tag =开启(默认值=开启)在php 5.6中
分区时间为

这是我的问题,我的virtualmin / apache配置为127.0.0.2,但是我将我的外部IP地址放在浏览器中,我刚刚更新了v / a配置,现在可以正常工作了
Hayden Thring,

我只是想念libapache2-mod-php7.3。
dxvargas

8

我知道这听起来很傻...但是很少发生。

检查您是否尝试从以下位置执行php

**http://localhost/info.php**

而不是

file:///var/www/info.php

ps>,您会注意到,如果您从shell编写

php info.php 

它回答的代码(这意味着PHP功能)。


PHP可以正常工作(使用命令行检查)。但是,当我使用URL访问文件时,它显示了PHP代码。
muaaz

8

这再次发生在我身上,服务器正在下载html文件,而不是进行处理。我有一段时间没有在计算机上使用Web服务器apache了,与此同时,Ubuntu像从最初安装的LTS的两个版本进行了更新。现在它是

$ cat /etc/issue
Ubuntu 16.04 LTS

因此,php在像这样工作之后:

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

网络服务器现在正在解析php。由于php7.0现在可以像运行php5之前一样运行,因此现在也许需要更新一些网站。那好吧。


5

我已经通过卸载XAMPP和安装WAMP来解决了这一问题。谢谢您的帮助。


我是xampp,但效果很好。你有没有发现它为什么被展示的php代码@Gui

5

我在High Sierra(OS X 10.13.5)附带的php 7.1上遇到了这个问题,/etc/apache2/httpd.conf通过进行以下更改进行编辑有助于:

  1. 取消注释此行

    LoadModule php7_module libexec/apache2/libphp7.so
  2. 最后粘贴

    <IfModule php7_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        <IfModule dir_module>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>

同样,您可以建议Wamp 3版本相同的错误。wamp 3中没有/etc/apache2/httpd.conf文件夹路径。@AamirR
Gem,

这对我有用!!!我的问题更奇怪。有些文件提供了PHP,而其他文件却没有,仅显示了代码。
sjw0525

4

在我的ubuntu 14.04,apache 2.4,php 5.5.9安装上,我尝试在/ var / www / html(默认文档根目录)上使用sample.php,它工作正常。所以问题出在我的虚拟服务器配置上。解决方案是在包含.php的Directory def上包括以下行:

    php_admin_flag engine on

在虚拟服务器的httpd.conf中的Apache文件中应在哪一行添加?我正在使用Webmin
suresh pareek

3

我有类似的问题,但就我而言,解决方案是不同的。我保存php代码的文件名为“ somename.html”, 将其更改为“ somename.php”,效果很好


这也为我解决了。有谁知道服务器将在.html文件中执行php,还是在要执行一行php时将文件结尾始终更改为.php?
full_prog_full

取决于服务器设置,在大多数情况下,将执行anyfile.html中存在的php代码。如果不是,则可以更改,尽管idk的方式是:P
Netrus '16

3

对于运行php 7的LAMP的全新设置,请编辑文件/etc/httpd/conf/httpd.conf注意:确保在更改任何内容之前对其进行备份。

将此粘贴到文件的最底部:

<IfModule php7_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

然后,搜索LoadModule并粘贴以下行:

LoadModule php7_module modules/libphp7.so

这行代码只会要求httpd加载php 7模块

然后重启httpd



3

确保脚本包含

<?php

在应执行的代码之前。应该有之间没有空格<?,并php在此。


2

这是在我的.htaccess中

DirectoryIndex index.html index.htm

index.html包含PHP代码。默认情况下,PHP不会将扩展名为htm *的文件作为PHP代码进行处理。

您可以通过在.htaccess中添加以下内容来覆盖它:

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

1

我认为它显示的是代码而不是结果的问题是它不会发送到本地主机。重新检查您要输入的地址。您要转到本地文件目录还是本地主机。

从您发送的屏幕快照中,它将发送到您的计算机而不是本地主机。

“ file:///”它应该是“ localhost /”


1

重新安装mcrypt模块对我有用。

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt

说实话,也许是因为我没有在系统上正确配置PHP,但是由于我问的关于同一问题的问题已被标记为该问题的重复,因此我只能在这里回答。我不知道为什么要投反对票。
bg

这个答案与linux有关,topicstarter显然是在使用Windows
Raymond Nijland

1

我遇到了一种情况,我不小心开始在根目录下解压缩我的文件目录。它从我的文件文件夹中添加了.htaccess文件,该文件将阻止所有php

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

底线检查根目录下的.htaccess文件。


1

如果您具有这样的配置:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

在您的httpd.conf中取消注释下一行

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

这个对我有用


1

AddType application/x-httpd-php .php如果使用的是Apache 2.4,请添加到httpd.conf文件中


1

仅仅花了几个小时尝试使PHP 5与Windows 10上的Apache 2.4一起运行。最后对我来说,这是httpd.conf 中的错字LoadModuledenny2018的这个apachelounge线程中,通过最后一个答案提请注意编写和确切的模块路径。谢谢!

两天后,我发现...我的目录已写好c:(小写)

我有LoadModule php5_module "c:/php/php5apache2.dll"对Apache 2.4正确的是:

LoadModule php5_module "C:/php/php5apache2_4.dll"

所以我也错过了_4以前(对于Apache 2.4)。适用于我的完整代码段:

# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

刚刚尝试过PHP 7httpd.conf中有Apache 2.4 的LoadModule行,

LoadModule php7_module "C:/php/php7apache2_4.dll"

目前php手册显示了 c:/php/php5apache2.dll哪些当然需要调整。


1

就我而言(Apache / 2.4.34),

取消注释特定模块后

“ LoadModule php7_module libexec / apache2 / libphp7.so”

“ /etc/apache2/httpd.conf”

我的问题不见了。


1

如果我们在同一页面中,请执行以下操作

sudo apt-get install php -y sudo apt-get install php-{bcmath,bz2,intl,gd,mbstring,mysql,zip,fpm} -y

要在Apache2中启用PHP 7.2 FPM,请执行以下操作:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

更新2:Apache下载.php文件而不是渲染

之后,我面临上述问题。还有像类似的问题

我不知道为什么,但是它只发生在/var/www/html/根文件夹中的.php文件中。子目录一切正常。(例如,wordpress和phpmyadmin工作正常)

所以这是我的解决方案。我决定启用php模块。所以我运行了这个命令:

a2enmod php7.2

但是我得到了这个错误:

考虑对php7.2的依赖性mpm_prefork:考虑对mpm_prefork的冲突mpm_event:错误:模块mpm_event已启用-由于冲突而无法继续。首先需要禁用它!考虑到mpm_prefork的冲突mpm_worker:错误:无法为php7.2启用依赖项mpm_prefork,正在中止

所以我决定通过运行以下命令来禁用MPM:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

然后重新启动Apache:

systemctl restart apache2

然后启用php7.2(我的安装版本):

sudo a2enmod php7.2

现在一切正常。


0

导致此问题的另一个可能原因是,您正在尝试从UserDir模块的“用户目录”中运行脚本。默认情况下,在用户目录中运行PHP脚本是禁用的。如果脚本public_html位于主文件夹中的目录中,并且您尝试从中访问它,则会遇到此问题http://localhost/~your_username

要解决此问题,请打开/etc/apache2/mods-enabled/php7.2.conf。您必须在以下内容的底部注释或删除标签块

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

-1

如果放置在/ var / www / html /中,则该文件应具有.php例如example.php(如果它是example,则它不起作用),但如果将其更改为example.php,则它可以工作。

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.