【问题标题】:php echo includephp回显包括
【发布时间】:2010-11-30 13:26:11
【问题描述】:
echo ("<div style=\"text-align:center\">" . include ('file.php') . "</div>\n");

我不知道为什么,但是每当我把那行放在我的脚本中时,我都会得到空白屏幕:(

【问题讨论】:

    标签: php wsod


    【解决方案1】:
    echo "<div style=\"text-align:center\">";
    include ('file.php');
    echo "</div>\n";
    

    Include 不返回文件解析的结果,因此在此处进行连接毫无意义。

    【讨论】:

    • 诅咒!被打败了。
    • 一个包含“return 'something';”的文件将返回该值。如果不是,则包含成功则返回 1(或 true),否则返回 false。
    【解决方案2】:

    运行这段代码时:

    echo ("<div style=\"text-align:center\">" . include ('temp-2.php') . "</div>\n");
    

    (我从您的示例中复制粘贴,仅更改文件名)

    我收到此警告:

    Warning: include(temp-2.php</div> ) [function.include]: failed to open stream: No such file or directory
    

    不确定include 指令的() 是否符合您的预期...


    实际上,include manual page 上的 example #4 看起来可以解释这一点:

    <?php
    // won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('')
    if (include('vars.php') == 'OK') {
        echo 'OK';
    }
    
    // works
    if ((include 'vars.php') == 'OK') {
        echo 'OK';
    }
    ?>
    


    而且,确实,将您的代码重写为:

    echo ("<div style=\"text-align:center\">" . (include 'temp-2.php') . "</div>\n");
    

    效果更好:没有警告 - 文件实际上包含正确。


    作为旁注:如果你得到一个白屏,这可能是因为你的配置“隐藏”了错误和警告——这对于开发环境来说不是很好:显示这些会让你大吃一惊。

    要更改它,您可以在 php.ini 文件中使用 error_reportingdisplay_errors 选项。

    或者,如果您无权访问该文件,则可以使用 error_reportingini_set -- 在脚本开头可能会这样做:

    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    

    注意:当然,您不希望在生产环境中出现这种情况,您应该在其上记录错误(请参阅log_errors),而不是显示它们。

    【讨论】:

    • 终于有人解释了问题所在,而不仅仅是给出解决方案。 +1
    • @MitMaro:谢谢! (实际上,这很有趣:再次通过一个关于 SO 的问题,我有机会学习一些东西——我之前从未尝试过这种包含 ^^)
    • 注意include的内容会出现在echo的内容之前。所以include 的内容没有被 DIV 包裹。
    • @Gumbo:感谢您指出这一点!没注意到 :-( (显然,如果它被返回,你可以通过 return 语句在 div 中获取一些东西,不过——通过一些输出缓冲,可能会有一些事情可以做......即使我不会采用那种解决方案)
    • @Pascal MARTIN:我知道,我在回答中写道。 ;)
    【解决方案3】:

    我不知道你是否可以做这样的事情。 首先执行包含,然后对包含文件中的任何给定变量执行回显。

    【讨论】:

    • 我想过这个问题,我很确定它会起作用,但我有点想要一个 1 班轮......除了解决这个问题之外,它并不能完全解决这个问题
    • php echo 是一个构造而不是一个函数。调用 include 时会执行包含的文件。
    • 您可能已将 error_reporting 设置为关闭。这就是为什么你没有收到错误
    【解决方案4】:

    我认为你需要这样做:

    ob_start();
    include('file.php');
    $contents = ob_get_clean();
    
    echo ("<div style=\"text-align:center\">" . $contents . "</div>\n");
    

    “include”指令不返回任何内容,因此尝试将其附加到字符串是行不通的。

    【讨论】:

      【解决方案5】:

      include 不是函数,而是一种特殊的语言结构。这也是为什么您不需要在“参数”周围加上括号的原因,因为include 只有一个“参数”。将其包装在括号中就像将任何其他值包装在括号中:

      1 === (1) === ((1)) === (((1))) === …
      

      相反,您需要将整个构造括在括号中:

      echo "<div style=\"text-align:center\">" . (include 'file.php') . "</div>\n";
      

      但由于include 不返回包含的脚本文件的输出而是直接打印它,您需要缓冲输出并将其返回到包含该文件的脚本:

      <?php // file.php
          ob_start();
          // …
          return ob_get_clean();
      

      那会奏效。但我不认为你想这样做。所以这可能更容易:

      echo "<div style=\"text-align:center\">";
      include 'file.php';
      echo "</div>\n";
      

      顺便说一句:echoprintexitdie 也是特殊的语言结构。另见require_once () or die() not working

      【讨论】:

      • 我试过了,对我来说效果很好,所以我没有办法用这个做一个 1 班轮?
      • @alexus:在 PHP 中,语句由分号分隔,而不是像在其他语言中那样由换行符分隔。因此,如果您愿意,可以将这三个语句放在一行中。这将为您提供一个衬里:echo "&lt;div style=\"text-align:center\"&gt;"; include 'file.php'; echo "&lt;/div&gt;\n";
      • 我真的不明白人们需要一个班轮。大多数时候,它们只是让代码更难阅读。
      【解决方案6】:

      要输出 file.php 的内容,您可能需要使用 http://us3.php.net/file_get_contents

      【讨论】:

      • 这个大概会打印里面的代码,我看他是要执行的
      【解决方案7】:

      file.php 有什么东西吗?它可能是空的,或者其中的某些内容可能会导致错误。

      【讨论】:

        【解决方案8】:

        查看浏览器中的源代码,而不仅仅是可见部分。通常您可以通过按 Ctrl+U 来执行此操作。如果它只是输出一个空的div 元素,您会在浏览器中看到一个空白屏幕。请记住,.php 文件很可能在输出之前在您的设置中解析,这意味着您永远不会看到 &lt;?php ?&gt; 标记和它们之间的代码。

        【讨论】:

          【解决方案9】:

          我从没想过 include 是一个返回字符串你可以打印的函数。

          Reference Manual 表明,如果有的话,它会返回一个布尔值。

          【讨论】:

            【解决方案10】:

            file.php 末尾是否有额外的换行符?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-12-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多