从文件中获取所有内容,包括PHP代码

时间:2012-12-30 13:43:33

标签: php

我正在制作一个小型CMS进行练习。我正在使用CKEDITOR,并试图在文本中编写类似%contactform%的内容,然后我的PHP函数将用contactform替换它。

我已经完成了用表单替换文本。但现在我需要表单的PHP代码来发送邮件。我正在使用file_get_contents();但它正在剥离php代码。

我用过include();然后从另一个文件中获取php代码,现在可以使用了。我想用一个文件来做。

那么 - 我可以从包含php代码的文件中获取所有内容吗?

* 更新*

我会尝试用另一种方式解释。

我可以在CMS中创建一个页面,我可以在其中编写标题和一些内容。在内容中,我能够写出%contactform%。

当我从数据库中获取内容时,我使用file_get_contents();将%contactform%替换为来自/inserts/contactform.php的内容。我在HTML和我的PHP代码中的表单:

if(isset($_POST['submit'])) {
  echo 'Now my form is submitted!';
}

<form method="post">
  <input type="text" name="email">
  <input type="submit" name="submit">
</form>

现在我期待检索表单并且php代码处于活动状态。但是,如果我按下表单中的提交按钮,则不会触发php代码。

要显示我希望能够使用的PHP代码。

3 个答案:

答案 0 :(得分:1)

是...

$content = file_get_contents( 'path to your file' );

用于打印尝试

echo htmlspecialchars( $content );

答案 1 :(得分:1)

我仍然需要猜测,但是根据您的更新,我认为您最终会得到一个变量,其中包含数据库中的内容,%contactform%替换为file_get_contents('/inserts/contactform.php')

类似的东西:

$contentToOutput = str_replace(
  '%contactform%',
  file_get_contents('/inserts/contactform.php'),
  $contentFromDatabase
);

如果您echo输出该变量,它将按原样发送内容。没有php会被执行。

虽然在许多情况下风险很大,但如果你知道自己在做什么,可以使用eval来解析php代码。使用这样的混合代码,您可能希望像下面这样做。

ob_start();
eval('; ?>' . $contentToOutput); 
$parsedContent = ob_get_clean();

$parsedContent现在应该在执行代码后包含结果。您现在可以将其发送给用户或以您想要的任何方式处理它。

当然,您必须确保$contentToOutput中的任何内容都是有效的PHP代码(或带有php标签和文本的php的有效混合)。

Here是symfony Templating / PhpEngine 类的链接。请查看evaluate方法,以便在实际代码中查看上述示例。

答案 2 :(得分:0)

从阅读修订后的问题,我认为答案是“你不能从这里到达那里。”让我试着解释一下我认为你会遇到的事情。

首先,考虑HTTP的性质和客户端/服务器模型。客户端发出请求,服务器做出响应。每个请求都是原子的,完整的和无状态的,每个响应都是完整的,通常是瞬时的。这就是结束。服务器断开连接并返回“休眠”,直到客户端发出新请求。

假设我提出了一个网页请求。 PHP脚本运行并准备响应文档(可能是HTML),服务器将文档发送到我的浏览器。如果文档包含HTML表单,我可以将表单提交到 action = 脚本的URL。但是当我提交表单时,我正在发出一条返回服务器的新请求。

据我了解您的设计,计划是将HTML表单和PHP动作脚本放入%contactform%字符串位置的CKeditor的textarea中。这将呈现给客户端,客户端将表单提交回您的服务器,在那里运行PHP脚本。我只是觉得它不会起作用,如果你找到一种方法使它工作,你基本上会说,“我会接受外部输入并用PHP运行它。”这对我来说是一个令人无法接受的安全风险。

如果您可以退出技术细节,并以简明的语言告诉我们您要实现的目标,我们可以提供有关设计模式的建议。