添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

PHP代码没有被执行,但代码显示在浏览器的源代码中

399 人关注

我试图在一个项目上执行一些PHP代码(使用Dreamweaver),但代码没有被运行。

当我检查源代码时,PHP代码显示为HTML标签(我可以在源代码中看到它)。Apache运行正常(我使用的是XAMPP),PHP页面被正常打开,但PHP代码没有被执行。

有人对发生的事情有什么建议吗?

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

Edit: The Code..:

include_once("/code/configs.php");
5 个评论
你是否使用短标签 <? 而不是 <?php
永远不要使用短标签。( <? )。它们已经被废弃了,在很多地方都不适用,而且完全没有必要。节省三个按键并不是一个有效的理由,让你的代码在可能有一半的服务器上运行失败。
@mopsyd 哪里说过短标签被废弃了?请注意 短标签 不等同于 短回声标签 ,以及 短回声标签 从 PHP 5.4 开始默认支持 short_open_tag
我知道短标签不是短回声标签,这就是为什么我在评论中指明了我在谈论的是哪一个。在写这篇文章的时候,短标签被标记为php 6版本的废止标签,尽管后来显然已经改变。问题仍然存在,很多服务器都禁用了它们,这使得你的代码的可移植性大大降低。这不适用于短回声标签( <?= ),无论服务器设置如何,它们在php 5.4以上的版本中应该运行良好。
愚蠢地谈论短标签。长标签很糟糕,而且很难看。在10年的php编程中,我从未遇到过这样的问题。它们几乎从来不是问题所在
php
apache
Gui
Gui
发布于 2011-02-26
30 个回答
shmeeps
shmeeps
发布于 2018-10-03
已采纳
0 人赞同

听起来你的配置有问题,这里有几处你可以检查。

  • 确保PHP已经安装并正确运行。这可能听起来很傻,但你永远不知道。一个简单的检查方法是在命令行中运行 php -v ,看看是否返回版本信息或任何错误。

  • 确保PHP模块被列出 和未加注释的 在你的Apache的httpd.conf中,这应该是类似于 LoadModule php5_module "c:/php/php5apache2_2.dll" 的文件。搜索 LoadModule php ,并确保其前面没有注释( ; )。

  • 确保Apache的httpd.conf文件里有PHP的MIME类型。这应该是类似于 AddType application/x-httpd-php .php 的东西。这将告诉Apache将 .php 文件作为PHP运行。搜索 AddType,然后确保有一个 PHP 的条目。 而它是未加注释的 .

  • 确保你的文件有 .php 扩展名,或第3点中MIME定义中指定的扩展名,否则将不能作为PHP执行。

  • 确保你没有使用 短标签 在PHP文件( <? )中,这些是 不是在所有的服务器上都启用 默认情况下,我们不鼓励使用它们。请使用 <?php 代替(或 enable 短标签 in your php.ini 如果你有依赖它们的代码,就用 short_open_tag=On )。

  • 请确保你是通过你的网络服务器使用像 http://localhost/file.php 这样的URL来访问你的文件,而不是通过本地文件访问 file://localhost/www/file.php

  • 最后检查一下 进一步设置提示的PHP手册 .

    不知道为什么,PHP 5.3.15的安装程序没有添加 AddType application/x-httpd-php .php 这一行。非常感谢!!
    @shmeeps: Where have you seen that short tags are deprecated? I've done some searching and can only find recommendations against them, nothing about deprecation. Granted for applications which are to be distributed it is better to use <?php in case the hosting server doesn't have them enabled, but for apps where you have full control over the server they're going to be on I don't see any reason not to use them.
    第6点对我有用,本地访问不使用apache服务器
    第2点对我来说是个安全的方法 - 【替换代码0
    @full_prog_full 试着上传一个以 .php 为扩展名,内容为 <?php echo("Success"); ?> 的文件,看看通过网络浏览器访问该文件,是否会显示 "成功",而没有相关的PHP代码。
    sj59
    sj59
    发布于 2018-10-03
    0 人赞同

    php7 :

    sudo a2enmod proxy_fcgi setenvif
    sudo a2enconf php7.0-fpm
    sudo service apache2 restart
        
    虽然这个代码片段可能会解决这个问题,但包括解释 how why this solves the problem 真的会有帮助 来提高你的帖子的质量。请记住,你是在为未来的读者回答问题,而不仅仅是现在的提问者! 请 edit your answer to add explanation,和give an indication of what limitations和assumptions apply.
    这个答案是与Linux有关的,而提问者显然是在使用Windows。
    @RaymondNijland 是真的,但这是规范的,我发现了这个问题,它救了我一个多小时的故障排除后。
    如何以及为什么。当PHP7没有在make脚本中配置默认的fast-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就可以作为一个快速CGI服务运行PHP7模块。
    请补充说明
    Matt McDonald
    Matt McDonald
    发布于 2018-10-03
    0 人赞同

    我在Ubuntu上运行Apache,我的问题是, /etc/apache2/mods-available/php5.conf 文件缺少这个。

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

    我又把它加了进去,结果php正确地解析了php文件。

    EdC
    EdC
    发布于 2018-10-03
    0 人赞同

    php7用户注意,将此添加到你的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>
        
    只是为了帮助其他人解决这个问题。替换代码0】文件位于 /etc/apache2/httpd.conf 中如果你用的是Ubuntu,那就是 apache2.conf ,在同一个目录下,需要为PHP7修改。
    Arrvi
    Arrvi
    发布于 2018-10-03
    0 人赞同

    我发现了导致这个问题的另一个问题,并且已经解决了。我不小心把我的脚本保存为 UTF-16 的编码。看来,PHP5默认不能识别16位编码的 <?php 标签。

    Hasan Baig
    Hasan Baig
    发布于 2018-10-03
    0 人赞同

    你只是在浏览器中打开你的php文件。如果你直接从你的目录中打开一个文件,它在任何情况下都不会执行php代码。

    use: http://locahost/index.php or http:127.0.0.1/index.php

    启用php短代码。在你的案例中,你使用的是 <? ,这是 <?php 的php短代码。默认情况下,php短代码是禁用的。

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

    Gui
    当我只是包括一个文件时,为什么需要mcrypt?你应该注意到,这个问题已经很老了,而且短标签的问题已经提到了16次,也是在我问题的顶部评论中提到的。
    我只是分享我的解决方案,我也面临同样的错误,在执行了mcrypt的这个命令后,我的问题就解决了。
    zond
    默认情况下,php短代码是启用的。 short_open_tag=On (默认值=ON) in php 5.6
    这是我的问题,我的virtualmin/apache配置是127.0.0.2,但我在浏览器中输入了我的外部ip地址,我刚刚更新了我的v/a配置,现在它工作了。
    我只是缺少libapache2-mod-php7.3。
    Henry van Megen
    Henry van Megen
    发布于 2018-10-03
    0 人赞同

    我发布这个答案是因为我的Virtualmin/Webmin管理界面认为禁用我的PHP引擎是个好主意。我花了点时间找到解决办法,所以我想和你们分享。

    另外,一定要检查与这个特定主机或虚拟主机相关的网站配置文件中没有任何关闭PHP的php_admin_value,比如这样。

    php_admin_value engine Off
    

    When in doubt, comment it...

    # php_admin_value engine Off
    

    并重新启动你的网络服务器。

    这些配置设置到底在哪里?
    @cronoklee In vHost settings of httpd.conf. For existing hosts, you need to edit apache config in webmin. For future hosts, go to virtualmin > server template > apache website. Eitherway, this is not as secure as fastcgi - virtualmin's default. So the correct approach should be to troubleshoot why fcgi doesn't work, for example it may be caused by file permissions.
    如果你使用的Apache版本没有httpd.conf,请在 /etc/apache2/mods-enabled/php7.conf php5.conf 中查找。
    当对某个配置设置的位置有疑问时,你总是可以使用grep来找到你要找的东西,(例如在这个例子中)输入。 sudo grep php_admin_value /etc/* -R
    ndasusers
    ndasusers
    发布于 2018-10-03
    0 人赞同

    这种情况刚刚又发生在我身上,伴随着服务器下载html文件,而不是处理。我已经有一段时间没有在电脑上使用webserver 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 
    

    Webserver现在正在解析php。也许现在需要更新一些网站,因为现在运行的是php7.0,而之前运行的是php5。哦,好吧。

    user3257072
    user3257072
    发布于 2018-10-03
    0 人赞同

    我知道这听起来很傻......但很少会发生这种情况。

    检查你是否在试图从

    **http://localhost/info.php**
    
    file:///var/www/info.php
    

    ps> you can notice that if you write from shell

    php info.php 
    

    它与代码一起回答(它指php函数)。

    PHP工作正常(用命令行检查)。但是,当我用URL访问文件时,它显示的是PHP代码。
    Gui
    Gui
    发布于 2018-10-03
    0 人赞同

    我已经通过卸载XAMPP,安装WAMP解决了这个问题。 谢谢你的帮助。

    Pie
    我是xampp,但它工作得很好。你有没有发现为什么它显示php代码@Gui
    AmirRezaM75
    AmirRezaM75
    发布于 2018-10-03
    0 人赞同

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

    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

    update 2: Apache downloads .php file instead of rendering

    此后,我面临上述问题。有类似的问题,如 this .

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

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

    a2enmod php7.2

    but I got this errors:

    考虑到 php7.2 的依赖性 mpm_prefork。 考虑到mpm_prefork的mpm_event冲突。 ERROR:模块 mpm_event 已启用 - 由于冲突不能继续。它需要先被禁用! 考虑到mpm_prefork的mpm_worker冲突。 ERROR:无法启用 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

    而现在一切工作都很正常。

    AamirR
    AamirR
    发布于 2018-10-03
    0 人赞同

    我在High Sierra (OS X 10.13.5)的php 7.1上遇到了这个问题,编辑 /etc/apache2/httpd.conf 并做了以下修改后有了帮助。

  • Uncomment this line

    LoadModule php7_module libexec/apache2/libphp7.so
    
  • 将以下内容粘贴在最后

    <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>
        
  • Gem
    同样的,你能不能建议一下Wamp 3版本的相同错误。在Wamp 3中没有/etc/apache2/httpd.conf文件夹路径。@AamirR
    这对我来说很有效!!。我的是一个比较奇怪的问题。有些文件渲染了PHP,有些却没有,只是显示了代码。
    Rogelio Triviño
    Rogelio Triviño
    发布于 2018-10-03
    0 人赞同

    在我的ubuntu 14.04,apache 2.4,php 5.5.9的安装上,我在/var/www/html(默认的文档根目录)上试了一下sample.php,它运行正常。 所以问题出在我的虚拟服务器配置上。 解决办法是在包含.php的目录def中加入这一行。

        php_admin_flag engine on
        
    我应该在我的虚拟服务器的Apache文件的httpd.conf中的哪里添加这一行? 我正在使用Webmin
    Barmar
    Barmar
    发布于 2018-10-03
    0 人赞同

    确保该脚本包含

    在应该被执行的代码之前。其中 <? php 之间不应该有空格。

    像这样的解决方案是非常重要的!当然,这是基本的,但我们中的一些人只是偶尔接触一下php,而忘记了这样的东西。而那些大公司(在我看来,就是编写Google Sheets API文档的人)有时会在他们的 "快速入门 "演示中省略这些。谢谢你,@Barmar!
    mevers303
    mevers303
    发布于 2018-10-03
    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>
        
    Netrus
    Netrus
    发布于 2018-10-03
    0 人赞同

    我也有类似的问题,但我的解决方法不同。 我的文件中保存的php代码被称为 "somename.html" 改为 "somename.php" worked fine

    这也为我解决了问题。有谁知道sever是否会在.html文件中执行php,还是当有一行php要执行时,文件结尾总是要改成.php?
    这取决于服务器的设置,大多数情况下,存在于anyfile.html中的php代码将被执行。如果没有,可以改变,虽然不知道如何改变。
    Eric Libay
    Eric Libay
    发布于 2018-10-03
    0 人赞同

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

    在我的例子中,php模块没有被加载。试试这个。

  • Check which modules are loaded: apache2ctl -M. Look for module like php7_module (shared)
  • If no php module is listed, then try to load the module that corresponds to your php version. In my case the php packet is libapache2-mod-php7.3. So I did: a2enmod php7.3 and the problem was solved.
  • Leonardo Rivera
    Leonardo Rivera
    发布于 2018-10-03
    0 人赞同

    使用Debian 10测试安装Apache + php7的最简单方法。

    apt-get update -y
    apt-get install apache2 php7.0 libapache2-mod-php  -y
    sudo service apache2 restart
        
    Jahmic
    Jahmic
    发布于 2018-10-03
    0 人赞同

    这是在我的.htaccess中

    DirectoryIndex index.html index.htm
    

    index.html中含有PHP代码。 默认情况下,PHP不会把带有htm*等扩展名的文件作为PHP代码处理。

    你可以通过在.htaccess中添加以下内容来覆盖这一点。

    <FilesMatch ".+\.html$">
        SetHandler application/x-httpd-php
    </FilesMatch>
        
    user3890355
    user3890355
    发布于 2018-10-03
    0 人赞同

    如果你有这样的配置。

    <VirtualHost *:80>
        ServerName example.com
        DocumentRoot "/var/www/example.com"
        <FilesMatch "\.php$">
            SetHandler "proxy:fcgi://127.0.0.1:9000"
        </FilesMatch>
    </VirtualHost>
    

    Uncomment next lines in your httpd.conf

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

    It works for me

    0 人赞同

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

    Wilfredo
    Wilfredo
    发布于 2018-10-03
    0 人赞同

    试着重新启动apache服务器。这就是我犯的错误--在安装完php后忘记了重启服务器!

    service httpd restart
        
    surazzarus
    surazzarus
    发布于 2018-10-03
    0 人赞同

    For php7.3. *你可以尝试安装这些模块。这对我来说很有效。

    sudo apt-get install libapache2-mod-php7.3
    sudo service apache2 restart
        
    Nav
    Nav
    发布于 2018-10-03
    0 人赞同

    我认为显示代码而不是结果的问题是它没有进入本地主机。重新检查你要进入的地址。

    从你发送的截图来看,它是到你的电脑上,而不是到本地主机上。

    "file:///" 它应该是 "localhost/"

    b.g
    b.g
    发布于 2018-10-03
    0 人赞同

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

    $sudo apt-get install php5-mcrypt
    $sudo php5enmod mcrypt
        
    b.g
    说实话,确实如此,也许是因为我的系统没有正确配置PHP。但是,由于我就同一问题提出的问题已经被标记为与本问题重复,我只能在这里回答。我不知道为什么要投反对票。
    这个答案是与Linux有关的,而话题发起人显然是在使用Windows。
    albertski
    albertski
    发布于 2018-10-03
    0 人赞同

    我有一个案例,我不小心在根目录下开始取消了我的文件目录。 它从我的files文件夹中添加了.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文件。

    bobble bubble
    bobble bubble
    发布于 2018-10-03
    0 人赞同

    Just spent hours of trying to get 在Windows 10上用Apache 2.4运行的PHP 5 .最后对我来说,这是一个打字错误,在 httpd.conf LoadModule 。引起注意的写作和确切的模块路径通过 最后一个答案 在这篇关于apachelounge的文章中 denny2018 .谢谢你!

    经过两个晚上,我发现...我的目录被写成 c: (小写)。

    I had LoadModule php5_module "c:/php/php5apache2.dll" but 正确,适用于apache 2.4 is:

    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>
    

    Just tried PHP 7. There the LoadModule line in httpd.conf为Apache 2.4读取

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

    Currently php手册显示替换代码8】这当然需要调整。

    sh6210
    sh6210
    发布于 2018-10-03
    0 人赞同

    在我的情况下(Apache/2.4.34)。

    在取消对特定模块的注释后

    "LoadModule php7_module libexec/apache2/libphp7.so"