PHP代码没有被执行,但代码显示在浏览器源代码中
Posted
技术标签:
【中文标题】PHP代码没有被执行,但代码显示在浏览器源代码中【英文标题】:PHP code is not being executed, but the code shows in the browser source code 【发布时间】:2021-07-03 11:30:12 【问题描述】:我正在尝试在项目上执行一些 php 代码(使用 Dreamweaver),但代码没有运行。
当我检查源代码时,PHP 代码显示为 html 标记(我可以在源代码中看到它)。 Apache 运行正常(我正在使用 XAMPP),PHP 页面正在正常打开,但 PHP 代码没有被执行。
有人对正在发生的事情有什么建议吗?
注意:文件已经命名为filename.php
编辑: 代码..:
<?
include_once("/code/configs.php");
?>
【问题讨论】:
您是否使用短标签<?
而不是<?php
?
永远不要使用短标签。 (<?
)。它们已被弃用,在很多地方都不能真正工作,否则完全没有必要。保存三个击键并不是让您的代码在可能运行它的一半服务器上失败的正当理由。
@mopsyd 哪里说不推荐使用短标签?请注意短标签与短回声标签不同,从PHP 5.4开始默认支持短回声标签,无论short_open_tag
设置。
我知道短标签不是短回声标签,这就是为什么我指定了我在评论中谈论的内容。在写这篇文章的时候,短标签被标记为 php 6 版本的弃用,尽管这显然已经改变了。仍然存在许多服务器禁用它们的问题,这使您的代码的可移植性大大降低。这不适用于短回显标签 (<?=
),无论服务器设置如何,它都应该在 php 5.4+ 上运行良好。
愚蠢地谈论短标签。长标签很烂,而且很丑。在 10 年的 php 编程中,我从未遇到过问题。他们几乎从来都不是问题
【参考方案1】:
您的配置似乎有问题,您可以检查以下几点:
确保 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 文件 (<?
) 中使用 short tags,默认情况下,它们并非在所有服务器上启用,因此不鼓励使用它们。请改用<?php
(如果您有依赖它们的代码,则使用enable short tags in your php.ini 和short_open_tag=On
)。
确保您通过网络服务器访问您的文件,使用类似http://localhost/file.php
的 URL,而不是通过本地文件访问 file://localhost/www/file.php
最后检查PHP manual for further setup tips。
【讨论】:
不知道为什么,但是 PHP 5.3.15 的安装程序没有添加行AddType application/x-httpd-php .php
。非常感谢!!
@shmeeps:您在哪里看到过短标签已被弃用?我做了一些搜索,只能找到针对他们的建议,没有关于弃用的内容。对于要分发的应用程序,最好使用
第 6 点对我有用.. 本地访问不使用 apache 服务器
第 2 点以安全的方式为我工作 - apt-get purge apache2; apt-get install apache2 libapache-mod-php5
@full_prog_full 尝试上传一个扩展名为.php
的文件,其内容为<?php echo("Success"); ?>
,并查看通过Web 浏览器访问该文件是否会导致显示“成功”而没有相关的PHP 代码。
【参考方案2】:
php7:
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart
【讨论】:
虽然这段代码 sn-p 可以解决问题,包括说明 如何 和 为什么 这解决了问题 would really help 以改进你的帖子质量。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。 这个答案是 linux 相关的 topicstarter 显然是在使用 windows。 @RaymondNijland 是的,但这是规范的,我发现了这个问题,经过一个多小时的故障排除,它救了我。 如何以及为什么:当 PHP7 没有在 make 脚本中配置默认的 fast-CGI 服务时会发生这种情况。sudo a2enmod proxy_fcgi setenvif
创建三个新模块 /mods-available/proxy.conf proxy_fcgi.load proxy.load
同样,sudo a2enconf php7.0-fpm
创建一个配置文件 /conf-available/php7.0-fpm.conf
一旦完成,Apache2 就可以将 PHP7 模块作为快速 CGI 服务运行。
请补充说明【参考方案3】:
我在 Ubuntu 上运行 Apache,我的问题是 /etc/apache2/mods-available/php5.conf
文件缺少这个:
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
我重新添加了它,php 正确解析了 php 文件。
【讨论】:
【参考方案4】: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>
【讨论】:
只是为了帮助其他人解决这个问题。httpd.conf
文件位于 /etc/apache2/httpd.conf
如果您使用的是 Ubuntu,则它在同一目录中的 apache2.conf
需要针对 PHP7 进行修改。【参考方案5】:
我发现了另一个导致此问题的问题,并且已经解决了。我不小心以UTF-16
编码保存了我的脚本。看来PHP5默认无法识别16位编码的<?php
标签。
【讨论】:
【参考方案6】:您只是在浏览器中打开您的 php 文件。您必须使用 localhost url 打开它。如果你直接从你的目录打开一个文件,它无论如何都不会执行 php 代码。
使用:http://locahost/index.php
或 http:127.0.0.1/index.php
启用 php 短代码。在您的情况下,您使用的是<?
,这是<?php
的php 短代码。默认情况下禁用 php 短代码。
如果你是 ubuntu 用户,也可以使用:sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt
。
【讨论】:
为什么我只包含一个文件时需要 mcrypt?你应该注意到这个问题很老了,短标签问题被提到了 16 次,也在我的问题的顶部评论中。 我只是分享我的解决方案,我也面临同样的错误,在执行 mcrypt 的这个命令后,我的问题解决了。你也可以试试。 默认启用 php 短代码。 php 5.6 中的short_open_tag=On(默认值=ON) 这是我的问题,我的 virtualmin/apache 配置是 127.0.0.2 但我将外部 IP 地址放在浏览器中,我刚刚更新了我的 v/a 配置,现在它可以工作了 我只是错过了 libapache2-mod-php7.3 。【参考方案7】:我发布这个答案是因为我的 Virtualmin/Webmin 管理界面认为禁用我的 PHP 引擎是个好主意。我花了一段时间才找到解决方案,所以我想我会与你们:
另外,请务必检查与此特定主机或虚拟主机相关的网站配置文件中没有任何关闭 PHP 的 php_admin_value,如下所示:
php_admin_value engine Off
如有疑问,请发表评论...
# php_admin_value engine Off
然后重新启动您的网络服务器。
【讨论】:
这些配置设置到底在哪里? @cronoklee 在 httpd.conf 的 vHost 设置中。对于现有主机,您需要在 webmin 中编辑 apache 配置。对于未来的主机,请转到 virtualmin > 服务器模板 > apache 网站。不管怎样,这不如 fastcgi 安全——virtualmin 的默认设置。所以正确的做法应该是排查fcgi为什么不工作的原因,比如可能是文件权限导致的。 如果您使用的 Apache 版本没有 httpd.conf,请查看/etc/apache2/mods-enabled/php7.conf
或 php5.conf
当对某个配置设置的位置有疑问时,您可以随时使用 grep 来查找您要查找的内容(例如在本例中)键入:sudo grep php_admin_value /etc/* -R
【参考方案8】:
我知道这听起来很傻……但很少发生。
检查你是否尝试从
执行php**http://localhost/info.php**
而不是来自
file:///var/www/info.php
ps> 你会注意到,如果你用 shell 写代码
php info.php
它用代码回答(这意味着 php 函数)..
【讨论】:
PHP 工作正常(使用命令行检查)。但是,当我使用 URL 访问文件时,它会显示 PHP 代码。【参考方案9】:这只是再次发生在我身上,随着服务器下载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
网络服务器现在正在解析 php.ini 文件。也许现在必须更新一些网站,因为 php7.0 现在运行在运行 php5 之前的位置。哦,好吧。
【讨论】:
【参考方案10】:我已经通过卸载 XAMPP 并安装 WAMP 解决了这个问题。 感谢您的帮助。
【讨论】:
我是 xampp,但它工作正常。你找到为什么它显示 php 代码了吗@Gui【参考方案11】:我在 High Sierra (OS X 10.13.5) 附带的 php 7.1 上遇到了这个问题,编辑 /etc/apache2/httpd.conf
并进行了以下更改:
取消注释该行
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>
【讨论】:
同样,您能否建议 Wamp 3 版本相同的错误。 wamp 3中没有/etc/apache2/httpd.conf文件夹路径。@AamirR 这对我有用!!!我的是一个更奇怪的问题。一些文件呈现了 PHP,而另一些文件则没有,只是显示了代码。【参考方案12】:在我的 ubuntu 14.04、apache 2.4、php 5.5.9 安装中,我尝试在 /var/www/html(默认文档根目录)上使用 sample.php,它工作正常。 所以问题出在我的虚拟服务器配置上。 解决方案是在包含 .php 的目录 def 中包含以下行:
php_admin_flag engine on
【讨论】:
我应该在我的虚拟服务器 httpd.conf 的 Apache 文件中的哪里添加这一行?我正在使用 Webmin【参考方案13】:如果我们在同一页面中,请执行以下操作
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 文件而不是渲染
在那之后,我遇到了上述问题。还有类似this的问题。
我不知道为什么,但它只发生在/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
现在一切正常。
【讨论】:
【参考方案14】:我有类似的问题,但在我的情况下,解决方案不同。 我保存 php 代码的文件名为 "somename.html" 将其更改为 "somename.php" 工作正常
【讨论】:
这也为我解决了。有谁知道服务器是否会在 .html 文件中执行 php,或者当有一行 php 要执行时,文件结尾是否总是必须更改为 .php? 取决于服务器设置,大多数情况下存在于 anyfile.html 中的 php 代码将执行。如果没有,则可以更改,尽管我知道如何:P【参考方案15】:对于运行 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
【讨论】:
【参考方案16】:使用以下命令检查您为 php 安装的所有软件包:
yum list installed | grep remi
在您的机器上安装所有相关的 php 包,尤其是 php-devel。
【讨论】:
【参考方案17】:确保脚本包含
<?php
在应该执行的代码之前。在此<?
和php
之间不应有空格。
【讨论】:
【参考方案18】:此问题的另一个可能原因是您试图在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>
【讨论】:
【参考方案19】:使用 Debian 10 测试的安装 Apache + php7 的最简单方法:
apt-get update -y
apt-get install apache2 php7.0 libapache2-mod-php -y
sudo service apache2 restart
【讨论】:
【参考方案20】:这是在我的 .htaccess 中
DirectoryIndex index.html index.htm
index.html 包含 PHP 代码。默认情况下,PHP 不会将扩展名为 htm* 的文件作为 PHP 代码处理。
您可以通过将以下内容添加到 .htaccess 来覆盖它:
<FilesMatch ".+\.html$">
SetHandler application/x-httpd-php
</FilesMatch>
【讨论】:
【参考方案21】:如果您使用的是 Apache 2.4,请将 AddType application/x-httpd-php .php
添加到您的 httpd.conf 文件中
【讨论】:
【参考方案22】:在我的情况下,php 模块没有加载。试试这个:
-
检查加载了哪些模块:
apache2ctl -M
。寻找像php7_module (shared)
这样的模块
如果没有列出 php 模块,则尝试加载与您的 php 版本对应的模块。在我的情况下,php数据包是libapache2-mod-php7.3
。所以我做了:a2enmod php7.3
,问题就解决了。
【讨论】:
【参考方案23】:对于php7.3.*,您可以尝试安装这些模块。它对我有用。
sudo apt-get install libapache2-mod-php7.3
sudo service apache2 restart
【讨论】:
【参考方案24】:我认为它显示代码而不是结果的问题是它不会去本地主机。重新检查你进入的地址。你是去本地文件目录还是本地主机。
从您发送的屏幕截图中,它将发送到您的计算机而不是本地主机。
“file:///”应该是“localhost/”
【讨论】:
【参考方案25】:重新安装 mcrypt
模块对我有用。
$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt
【讨论】:
它确实做到了,也许是因为我没有在我的系统上正确配置 PHP。但是,由于我提出的关于同一问题的问题已被标记为与该问题重复,我只能在这里回答。我想知道为什么投反对票。 这个答案是linux相关的topicstarter显然是使用windows【参考方案26】:我有一个案例,我不小心开始在根目录中解压我的文件目录。它从我的文件夹中添加了 .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 文件。
【讨论】:
【参考方案27】:如果你有这样的配置:
<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
对我有用
【讨论】:
【参考方案28】:刚刚花了几个小时试图让 PHP 5 在 Windows 10 上与 Apache 2.4 一起运行。最后对我来说,这是 httpd.conf LoadModule
中的一个错字。通过last answer in this apachelounge thread of denny2018 提请注意写作和准确的模块路径。谢谢!
两晚后我发现……我的目录写着
c:
(小写)
我有 LoadModule php5_module "c:/php/php5apache2.dll"
但对于 apache 2.4 正确是:
LoadModule php5_module "C:/php/php5apache2_4.dll"
所以我之前也错过了_4
(对于apache 2.4)。对我有用的完整 sn-p:
# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
刚刚尝试过 PHP 7。 httpd.conf 中的 LoadModule
行用于 Apache 2.4 读取
LoadModule php7_module "C:/php/php7apache2_4.dll"
目前php manual shows upc:/php/php5apache2.dll
当然需要调整。
【讨论】:
【参考方案29】:就我而言(Apache/2.4.34),
取消注释特定模块后
"LoadModule php7_module libexec/apache2/libphp7.so"
来自
"/etc/apache2/httpd.conf"
我的问题已经解决了。
【讨论】:
【参考方案30】:尝试重新启动 apache 服务器。这是我犯的错误——安装php后忘记重启服务器!
service httpd restart
【讨论】:
以上是关于PHP代码没有被执行,但代码显示在浏览器源代码中的主要内容,如果未能解决你的问题,请参考以下文章