Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP语法在HTML源代码中的显示_Php_Html - Fatal编程技术网

PHP语法在HTML源代码中的显示

PHP语法在HTML源代码中的显示,php,html,Php,Html,在我的CMS中,我添加了这个代码,它会更新到数据库。我可以在那里看到 db调用后,我的显示页面中有以下php代码: $content = $row['content']; 当我在正文中回显$content时,它将显示在HTML源中: 这怎么可能呢?为什么不显示我的联系方式? 如果有人有任何建议,我将不胜感激。 干杯。您正在回显$content,它只打印出值,但不在其中执行任何PHP。听起来您正在将PHP代码存储在数据库中,并希望在回显时执行它。这不会发生,就PHP解释器而言,它只是文本(

在我的CMS中,我添加了这个代码
,它会更新到数据库。我可以在那里看到

db调用后,我的显示页面中有以下php代码:

$content = $row['content']; 
当我在正文中回显$content时,它将显示在HTML源中:


这怎么可能呢?为什么不显示我的联系方式? 如果有人有任何建议,我将不胜感激。
干杯。

您正在回显$content,它只打印出值,但不在其中执行任何PHP。

听起来您正在将PHP代码存储在数据库中,并希望在回显时执行它。这不会发生,就PHP解释器而言,它只是文本(不是PHP代码),所以它只会回显它

您可以使用强制PHP解释(/run)字符串中的代码,但这会带来大量安全警告


在数据库中存储代码很少是正确的解决方案

简单的解决方案是对内容运行eval()

$content = $row['content'];

eval("?>".$content."<?php");
$content=$row['content'];
eval(“?>”$content。“如果您使用的是现有的CMS,如Joomla、Drupal等,
CMS将数据库中的文本作为它是什么来处理-文本。它不会执行文本,它可能只是将其作为一个字符串从数据库中拉出来并回显到页面上。有关更好的解释,请参阅Brenton Alker's

如果可能的话,最好在CMS的功能范围内工作,并避免黑客攻击您的CMS的源代码以使用
eval()
。根据您使用的CMS,可能会有一个功能(即:编辑器中的按钮或类似功能)包含来自另一个文件的代码

或者,也许有一个功能可以创建“对象”、“模块”,无论它们想调用什么,这将允许您将试图包含的代码(作为HTML)放入存储在DB中的“对象”中,允许您将其包含在许多页面中。这将达到与在PHP中执行
include()
相同的目标(代码重用、避免重复、在一个地方进行更改等),但这也可以避免您不得不破解CMS或开始冒安全风险

如果您已经建立了自己的CMS
您可能希望在中构建这样一个功能。这完全取决于您的需要以及安全性的重要性

最终,如果您使用
eval()
,并且如果有人黑客:

  • 你的数据库
  • 您的CMS管理界面

然后他们将能够在您的服务器上执行任何PHP代码。如果您在PHP.ini中启用了
exec()
(这是不安全的),那么他们也将能够在您的服务器上运行他们想要的任何代码…eeek!

谢谢这一点-简单的解决方案对我来说是最好的!也谢谢您提供的额外信息。悲哀的是eval()正如你所说,这对我来说不起作用。因此,计划C,我决定创建一个可选的tinymce模板,它有一个iframe,调用contact_表单页面,所有的处理都在iframe中进行。这是有效的。谢谢大家!

谢谢Miff。我应该如何调用它来显示$content?谢谢+1指出eval()在用户生成的内容上,这可能是你能做的最愚蠢的事情。你将不得不对CMS本身的代码进行一点黑客攻击。或者在你的CMS配置中可能有一个选项,在你存储内容的字段中执行PHP代码?@iAn-看起来他是作为一个CMS。因此,eval()不会对任何随机用户输入的文本执行,而是对侧编辑或管理员。仍然存在安全问题,但远没有对来自公共web表单的数据执行此操作那么糟糕。是的,我是超级管理员,将监督其他两名“办公室工作人员”“=没有代码猴子!我也使用tinymce/mysql构建了这个简单的CMS。但是其中一个页面是联系人页面,因此需要包含处理表单和验证的代码。感谢这一点-简单的解决方案对我来说是最好的!也感谢额外的信息。很遗憾,eval()正如你所说,这对我来说不起作用。因此,计划C,我决定创建一个可选的tinymce模板,它有一个调用contact_表单页面的iframe,所有的处理都在iframe中进行。这很有效。谢谢大家!@John,查看更新的语法。这对任何PHP代码都适用。
$content = $row['content'];

eval("?>".$content."<?php");
eval("\r\n?>\r\n ".$php."\r\n<?php\r\n");