在生成的php文件中包含动态PHP

时间:2009-05-13 16:33:46

标签: php

我正在尝试生成包含'模板html文件'的php文件,如下所示:

$page = htmlspecialchars("Hello! <?php include("template.html"); ?>");

但是,当我运行它时,我得到:

解析错误:语法错误,第15行/home/oliver/web/postmanapp.com/public/core.php中的意外T_STRING

我很确定我需要逃避PHP代码,只是不确定如何。

3 个答案:

答案 0 :(得分:8)

您必须转义以双引号声明的字符串内的任何双引号。所以这应该有效:

$code = "Hello! <?php include(\"template.html\"); ?>";

请参阅PHP manual about strings

如果您想将该代码放入文件中,可以使用file_put_contents function

file_put_contents('myscript.php', $code);

答案 1 :(得分:4)

答案是其他一些建议的组合,但他们都没有解决问题,甚至合并!

问题1.未转发双引号

"Hello! <?php include("template.html"); ?>"

这里有一个看起来像单个字符串的东西。 PHP看到开头的引用,然后它在单词模板之前得到引号,它说:哦,字符串现在就完成了。然后它看到模板,它认为它是一个变量。然后它看到一个点并认为它是一个新的连接运算符。然后它在html之后看到引号,它认为它是一个新的字符串,在这样的变量之后不允许这样做。

所以,你需要:

'Hello! <?php include("template.html"); ?>'

(我推荐的是。在PHP中单引号字符串运行得稍微快一点,因为它不必查看字符串中的变量。)

或者,正如对方建议的那样,使用双引号的转义字符:

"Hello! <?php include(\"template.html\"); ?>"

问题2. htmlspecialchars()的错误位置

但是,你有另一个更糟糕的问题。 htmlspecialchars基本上将所有HTML字符转换为HTML字符实体。

换句话说, < 会变为 &lt;

因此,您输入PHP文件的内容将是:

Hello! &lt;?php include("template.html"); ?&gt;

当您运行该文件时,PHP将不会执行,因为没有有效的打开标记。

问题3.这不是很好用的包含

我认为有一种解决问题的方法比使用PHP编写包含ANOTHER文件的PHP包含标记更好。

早期用户是对的... file_put_contents()或file_get_contents()可能更接近你想要的东西。但实际上,无论何时使用PHP向PHP写入另一个文件,都可能有更好的方法。我差点保证。

答案 2 :(得分:-3)

问题出在?&gt;它总是在php中结束一个代码块,导致一个未终止的字符串。您需要做的就是将结束标记拆分为两个可以连接的单独字符串:

$page = htmlspecialchars("Hello! <?php include("template.html"); ?" . ">");

并且,如前面的答案所述,您还需要转义字符串中的双引号,或使用单引号:

$page = htmlspecialchars("Hello! <?php include('template.html'); ?" . ">");

当你不使用隐含变量替换时,我还建议养成使用单引号的习惯。我似乎记得读它稍快一些,因为字符串不需要解析变量名。