Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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脚本?_Php - Fatal编程技术网

字符串中的PHP脚本?

字符串中的PHP脚本?,php,Php,这可能吗 我正在努力实现的目标: 以字符串的形式创建html模板 在字符串中,添加一个脚本,类似于include'php/countries.php' 将整个字符串回显到html页面 除第二步外,其他一切都有效。我希望看到一个php文件在html页面上回显被询问的问题,包括来自另一个php文件的回显 示例 echo "<div id=\"first\"><?php include \'countries.php\'; ?></div>"; echo "&

这可能吗

我正在努力实现的目标:

  • 以字符串的形式创建html模板
  • 在字符串中,添加一个脚本,类似于
    include'php/countries.php'
  • 将整个字符串回显到html页面
除第二步外,其他一切都有效。我希望看到一个php文件在html页面上回显被询问的问题,包括来自另一个php文件的回显

示例

echo "<div id=\"first\"><?php include \'countries.php\'; ?></div>";
echo "<div id=\"first\">".include 'countries.php'."</div>";
echo”“;
我已经尝试了上述方法,也尝试了以下方法:

示例

echo "<div id=\"first\"><?php include \'countries.php\'; ?></div>";
echo "<div id=\"first\">".include 'countries.php'."</div>";
echo'。包括'countries.php';
这需要评估吗


非常感谢您的帮助。

似乎有点傻,但您可以做到以下几点:

echo "<div id=\"first\">" . file_get_contents('countries.php') . "</div>";
echo”“。文件获取内容('countries.php')。"";
或者

echo”“;
包括“countries.php”;
回声“;
或者

$externalfile=compileexternal('countries.php');
函数compileexternal($file){
ob_start();
需要$file;
返回ob_get_clean();
}
“回声”$外部文件。"";
如果这些都不是您需要的,请更新问题。有十几种方法。

你可以使用

eval()

但这不是一个好的做法。

您可以使用正则表达式

例如,您的字符串可以是

<div id="first">{{countries.php}}</div>
{{countries.php}
然后你会这样做

$string = "<div id='first'>{{test2.php}}</div>";

echo preg_replace_callback("/(\{\{.+\}\})/", function($matches) {
   include_once( str_replace(array("{", "}"), "", $matches[0]));
}, $string);
$string=“{{test2.php}}”;
echo preg\u replace\u回调(“/(\{.+\})/”,函数($matches){
包括一次(str_替换(数组(“{”,“}”),“”,$matches[0]);
},$string);
  • 检查文件是否存在
    if(file_exists())
  • 检查是否可以包括该文件(我们不希望包括
    。/../../../../../etc/passwd

include函数返回的是布尔值而不是字符串。您应该创建一个countries()函数,该函数返回您要查找的信息,并相应地调用该函数。
echo”“;include'countries.php';echo“”
@rosscowar我总是把需求和包含搞混。。thanks@Mike因此,这是完美的。但是,像这样分解回声有什么隐藏的问题吗?@Ricky不,没有。它只是从一个语句到三个单独的语句。考虑到countries.php是一个php文件,可能包含服务器sid,这可能不是我们想要的e代码。我确实喜欢这种方法,尽管@Mike是对的,countries.php确实包含了更多的代码。@Ricky在你的问题中看到了我的评论。谢谢你的第三个选项。我从未使用过这种方法。我将对此进行研究!ob_end_clean()吗;函数的作用域关闭后自动发生?不扩展此对话,但我确实在一个特定情况下使用eval。最好不要使用eval,但如果需要,请将其与用户输入分开。@Mike您可能将其与exec()或system()混淆了.eval解析字符串的方式与解析包含/必需字段的方式相同。这不是一种好的做法(与require/include不同),因为字符串变量可以保存任何内容(实际上是depends,但您知道)