как загрузить содержимое страницы в себя, не вызывая бесконечного цикла?

#php #logic #infinite-loop

#php #Логические #бесконечный цикл

Вопрос:

Я пытаюсь разобраться, как вы можете запустить следующий 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'];
}
  

Комментарии:

1. Я пытаюсь разобраться, зачем вам это делать…

2. Вы, по сути, делаете 10 GOTO 10 .

3. Возможно, если вы включите то, что пытаетесь сделать, это может помочь. Как написано в вопросе, вы не можете делать то, что хотите, без бесконечного цикла.

Ответ №1:

Я не уверен, зачем вам это нужно, но не могли бы вы передать переменную, указывающую ей на остановку?

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

Комментарии:

1. $url = curPageURL() . '?stop=1'; хотя это может быть ошибкой: в curPageURL() : oele.com/some/page?index=4 ?stop=1 уже могут быть параметры GET, которые не будут заполняться $_REQUEST['stop']

Ответ №2:

Не может быть, чтобы это не привело к бесконечному циклу.

То, о чем вы спрашиваете, можно объяснить на этом вымышленном примере:

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

Итак, ответ, скорее всего, таков: вы этого не хотите! Вероятно, вы пытаетесь сделать что-то еще, но недостаточно хорошо это объясняете. Итак, начните с определения того, чего вы на самом деле пытаетесь достичь.

Ответ №3:

Вы не можете. Это, по определению, бесконечно рекурсивный.

Я предполагаю, что вы хотите немного другую версию текущей страницы (т. Е. Ту, которая больше не загружается). Смотрите ответ от newtron о том, как это сделать.

Ответ №4:

Я не знаю, в чем проблема с файлом cookie, возможно, в максимальном размере или тайм-ауте, когда содержимое отправляется с клиента на сервер.

Но поскольку вам нужно значение на стороне сервера, почему бы вам не использовать переменную сеанса в сочетании со значением времени, чтобы вы знали, истек ли срок его действия?