【问题标题】:PHP: re-parse entire page before serving?PHP:在服务之前重新解析整个页面?
【发布时间】:2009-03-03 20:00:03
【问题描述】:

在一个页面的最后,如果有什么事情发生了,就需要清除它,然后整个页面需要重新解析,然后再提供给客户端。我打算回显一个 javascript 来刷新页面,但这会让他们加载页面然后重新加载它......我想知道是否有一种方法可以告诉 php 引擎回到开头并重新-解析整个页面?

谢谢!

我会尝试更清楚地解释这个问题,但它很复杂,而且我是一个糟糕的沟通者。我在列出产品的页面上为用户提供了选择字段以缩小结果的选项。系统会记住这一点,因此他们不必一直选择它们。如果他们缩小了金属颜色之类的类别,然后转到与金属颜色无关的类别,例如水晶雕像,它将不会显示任何结果,因为没有一个与所选金属颜色相匹配。生成查询以从数据库中提取产品非常复杂,因为不同的类别对找到正确的产品有不同的要求。因此,一旦生成查询,我想针对 mysql_num_rows() 对其进行测试,如果没有结果,请清除用户的选择并重新开始。

【问题讨论】:

  • 根据您的附加文字,我认为 mabwi 的想法是正确的。

标签: php parsing php4


【解决方案1】:

您有点含糊,但如果您只是在谈论重新解析输出,您可以使用 output buffering 来做到这一点。

【讨论】:

  • 你能解释一下如何使用输出缓冲吗?我对这个概念完全陌生。谢谢!
  • PHP 不会在解析时提供 Web 服务器输出,而是将其保存在缓冲区中,直到您明确释放它。请查看包含的链接。
【解决方案2】:

我不完全清楚问题是什么,但你不能在创建 HTML 之前决定要显示什么,然后第一次发送正确的内容吗?

【讨论】:

    【解决方案3】:

    生成查询以从数据库中提取产品非常复杂,因为不同的类别对找到正确的产品有不同的要求。因此,一旦生成查询,我想针对mysql_num_rows() 对其进行测试,如果没有结果,请清除用户的选择并重新开始。

    在这种情况下,只需将查询放在返回结果的函数中,检查行数,如果为零则清除过滤器并再次调用该函数。

    【讨论】:

      【解决方案4】:

      输出缓冲(ob_start 和 ob_clean),结合将手头的功能分离到一个单独的文件和 eval()'ing 应该可以解决问题。

      哦,最近的 PHP 版本实际上有一个 goto 语句......尽管我总是否认提及它。 :-)

      【讨论】:

        【解决方案5】:

        我觉得你有点过头了。

        重新解析页面应该做的是将用户再次重定向到页面,使用

        header('Location: thepagefile.php');
        

        但是,如果您真的想在不创建新页面的情况下重新解析文件,您也可以再次包含该文件:

        包含页面文件.php

        但您可能会得到相同的结果。如果您想真正解析页面的输出,您可以执行以下操作:

        ob_start(); // this is at the very top of the code/page
        // all the code goes here
        $output = ob_get_clean();
        eval($output); // WTF?
        

        但这实际上没有意义,但我希望它有所帮助。

        我其实很想知道你真正想要解决的真正问题是什么。

        【讨论】:

          【解决方案6】:

          我认为您正在寻找这样的东西:

          <?php
          ob_start(); //we start output buffering, this means nothing is send to the browser
          //We do some code stuff
          $time = microtime();
          echo "Hai \n"; //Note taht mixing logic and output in real life
          echo $time;  // is terribly practice
          echo "\n bai"; //I do it here purely for the example
          if(/*some condition */){
           $anErrorHappened = true;
          }
          if($anEroorHappened === true){
            //Load the output in a var if you need it
            //Otherwise don't
            $output = ob_get_clean();
            //Do other code stuff
            //I.E. send an error page
            include('errorPage.html');
          }
          else{
           ob_end_flush(); //Send everything the script has echo()'d, print()'ed and send to the browser in any other way (I.E. readfile(), header() etc.)
          }
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-10-29
            • 1970-01-01
            • 1970-01-01
            • 2019-03-30
            • 2017-05-19
            • 1970-01-01
            • 2018-10-07
            • 1970-01-01
            相关资源
            最近更新 更多