【问题标题】:how to load the contents of a page into itself without causing an infinite loop?如何在不导致无限循环的情况下将页面内容加载到自身中?
【发布时间】:2011-05-16 16:04:07
【问题描述】:

我正在尝试了解如何运行以下 php:

$html = file_get_contents(curPageURL()); //where curPageURL() returns the current page URL

不会导致无限循环

编辑

我需要将整个渲染页面的内容放在一个变量中。

我试过了:

if(!isset($_COOKIE['page_fetch'])){
    $html = file_get_contents(curPageURL());
    setcookie('page_fetch',$html, time()+20,'/');
} else {
    $html = $_COOKIE['page_fetch'];
}

【问题讨论】:

  • 我正试图弄清楚为什么你会这样做......
  • 你实际上是在做10 GOTO 10
  • 也许如果你包括你正在尝试做的事情可能会有所帮助。正如问题所写,如果没有无限循环,您将无法做您想做的事情。

标签: php logic infinite-loop


【解决方案1】:

我不确定为什么你想要,但你能传递一个变量告诉它停止吗?

if (!$_REQUEST['stop']) {
    $url = curPageURL() . '?stop=1';
    $html = file_get_contents($url);
}

【讨论】:

  • $url = curPageURL() . '?stop=1'; 可能是错误的:curPageURL() 中可能已经有 GET 参数:oele.com/some/page?index=4 + ?stop=1 不会填充 $_REQUEST['stop']
【解决方案2】:

这绝不会导致无限循环。

你的问题可以用这个虚构的例子来解释:

function hi() {
   echo '<div>';
   hi();
   echo '</div>';
}

所以答案很可能是:你不想要这个!您可能正在尝试做其他事情,但没有很好地解释它。因此,首先要说明您真正想要实现的目标。

【讨论】:

    【解决方案3】:

    你不能。根据定义,它是无限递归的。

    我猜你想要的是当前页面的稍微不同的版本(即不会再次加载自身的版本)。有关如何做到这一点,请参阅 newtron 的答案。

    【讨论】:

      【解决方案4】:

      我不知道 cookie 有什么问题,可能是最大大小或内容从客户端发送到服务器时超时。

      但是既然你需要服务器端的值,为什么不结合使用会话变量和时间值,这样你就知道它是否已经过期了?

      【讨论】:

        【解决方案5】:

        为什么不使用 jquery 和 .load()?还是使用只触发一次的函数?

        【讨论】:

        • 为什么要投反对票?这是一个解决方案,答案是:当他用 php 这样做时,他总是有无限循环
        • 但谁说他在使用 jQuery?甚至是Javascript?甚至是 HTML?甚至任何类型的输出层。 (虽然我不是那个投反对票的人!)
        • 好吧,但他可以在这里使用这个解决方案,而不是这个解决方案,什么会创建无限循环
        • 如果他使用 HTML、Javascript 和 jQuery.... 他可以。也许这正是他想要的。也许不吧。谁知道!?
        • 我想我目前在问同样的问题,但用的是你提到的语言。请指教。
        猜你喜欢
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2017-12-13
        • 1970-01-01
        • 2013-05-17
        • 2018-10-12
        • 1970-01-01
        • 2012-07-30
        相关资源
        最近更新 更多