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