【问题标题】:PHP script inside of string?字符串内的PHP脚本?
【发布时间】:2014-10-10 03:09:31
【问题描述】:

这可能吗?

我想要完成的事情:

  • 创建一个字符串形式的html模板
  • 在字符串中,添加一个脚本,类似于include 'php/countries.php';
  • 将整个字符串回显到 html 页面

除了第 2 步之外的所有方法都有效。我希望看到一个 php 文件将所提出的问题回显到 html 页面上,包括来自另一个 php 文件的回显。

示例

echo "<div id=\"first\"><?php include \'countries.php\'; ?></div>";

我已经尝试了以上以及以下:

示例

echo "<div id=\"first\">".include 'countries.php'."</div>";

这需要评估吗?

感谢所有帮助。

【问题讨论】:

  • include 函数返回布尔值而不是字符串。您应该创建一个 countries() 函数来返回您要查找的信息并相应地调用该函数。
  • echo "&lt;div id=\"first\"&gt;"; include 'countries.php'; echo "&lt;/div&gt;";
  • @rosscowar 我总是混淆 require 和 include.. 谢谢
  • @Mike 所以这很完美。但是,像这样打破回声有什么隐藏的问题吗?
  • @Ricky 不,没有。它只是从一个语句变为 3 个单独的语句。

标签: php


【解决方案1】:

看起来有点傻,但你可以这样做:

echo "<div id=\"first\">" . file_get_contents('countries.php') . "</div>";

或者……

echo "<div id=\"first\">";
include "countries.php";
echo "</div>";

或者……

$externalfile = compileexternal('countries.php');
function compileexternal($file) {
    ob_start();
    require $file;
    return ob_get_clean();
}

echo "<div id=\"first\">" . $externalfile . "</div>";

如果这些都不是您需要的,请更新问题。有十几种方法。

【讨论】:

  • 考虑到 country.php 是一个 PHP 文件并且可能包含服务器端代码,这可能不是想要的。
  • 我喜欢这种方法,虽然@Mike 是对的,但是countrys.php 确实包含更多代码。
  • @Ricky 看看我在你的问题中的评论。
  • 感谢第三个选项。我从没见过这个用过。将对此进行调查!
  • 是否执行 ob_end_clean();一旦函数的作用域关闭就自动发生?
【解决方案2】:

你可以使用

eval()

但这不是一个好习惯。

【讨论】:

  • 不是为了扩展这个对话,但我确实在一个特定情况下使用了 eval。最好不要使用它,但如果需要,只需将其与用户输入分开即可。
  • @Mike 您可能将它与 exec() 或 system() 混淆了。 php.net/manual/bg/function.eval.php bg2.php.net/manual/en/function.system.php eval 解析字符串,就像解析包含/必需的字段一样。这不是一个好习惯(与 require/include 不同),因为字符串变量可以保存任何东西(确实取决于,但你知道)
【解决方案3】:

您可以使用正则表达式。

例如,您的字符串可能是;

<div id="first">{{countries.php}}</div>

你会这样做;

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

echo preg_replace_callback("/(\{\{.+\}\})/", function($matches) {
   include_once( str_replace(array("{", "}"), "", $matches[0]));
}, $string);
  • 检查文件是否存在if( file_exists() )
  • 检查文件是否可以包含(我们不想包含../../../../../etc/passwd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2017-08-17
    • 2019-03-02
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多