2010-05-28 2 views
-1

У меня есть эта часть кода PHP, которая получает $ _GET ['id'] (число) и делает некоторые вещи с этим. Когда его закончить, мне нужно увеличить это число ($ _GET ['id']) и перенаправить на ту же страницу, но с новым номером (также используя $ _GET ['id']).

Я делаю что-то вроде этого:

$ID = $_GET['id']; 

// Some stuff here 

// and then: 

$newID = $ID++; 

header('Location: http://localhost/something/something.php?id='.$newID); 
exit; 

Проблема здесь состоит в том, что браузер остановить меня делать это, и я получаю эту ошибку из браузера (Firefox): «Страница не перенаправлять правильно Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен ».

Помогите пожалуйста!

ПРИМЕЧАНИЕ. Некоторые люди предложили сделать внутренний цикл, я имею в виду простой цикл «для», но когда я делаю это, я получаю временную ошибку (60 секунд), потому что цикл займет больше времени.

+0

Можете ли вы показать нам фактический код? Ваш примерный код не проверяет условие, чтобы прекратить отправку перенаправления, если ID соответствует критерию, поэтому это бесконечный цикл. – Matt

+3

'$ newID = $ ID ++;' должен быть '$ newID = ++ $ ID;' –

+2

После прочтения ваших комментариев по ответам других, я уверен: вы используете неправильный инструмент для работы. – BalusC

ответ

0

Ответ на этот вопрос нужно сделать локально в моем локальном хосте, используя цикл «для» и set_time_limit(0), чтобы установить 60-дневный предел 60-го уровня PHP на 0 (бесконечный), а не перенаправлять на одну и ту же страницу снова и снова.

1

Я думаю, потому что браузер в бесконечном цикле.

Если этот код вы отправили также на something.php, он всегда будет увеличивать число.

Кроме того, нет причин делать $newID = $ID++, так как оператор ++ автоматически увеличит этот операнд ($ID).

Что вы хотите, это некоторая форма логики, чтобы остановить цикл. Возможно ...

if ($ID > 3) { 
    // don't redirect 
} 

Однако я не могу видеть, как перенаправлять как петля всегда хорошая идея, если вы пытаетесь сделать что-то, что может быть лучше достигнута с помощью фонового процесса или хрон.

+0

Идентификатор указывает на идентификатор статьи, которую мне нужно получить с веб-сайта, я хочу получить все статьи, поэтому я хочу сделать этот цикл .. от 1 до 9999, например, для извлечения всех. Но я думаю, что браузер автоматически остановит цикл, даже если есть еще , если ($ ID> 3) { // не перенаправлять } , как вы сказали .. – Jonathan

+0

@Jonathan. Вы имеете в виду выборку, загрузив ее в ваш сервер? Просто делайте это в цикле или используйте Cron ... это определенно * не * как вы должны это делать. – alex

+0

Проблема, когда я использую простой цикл, например, это то, что я получаю ограничение по времени (60 секунд). И его цикл, который, я думаю, займет час или два. – Jonathan

4

Это бесконечный цикл, каждый раз, когда страница загружается, он меняет $_GET['id'] и перенаправляет на себя снова. Вам нужно найти способ определить, как именно вы хотите (окончательный), и пропустить перенаправление.

Я предлагаю вам добавить второй параметр после приращения id, таких как final так, чтобы при загрузке страницы во второй раз, он пропускает редирект, потому что final был установлен.

т.е .:

if ($_GET['final'] != 1) 
{ 
    header('Location: http://localhost/something/something.php?id=' . $newID . '&final=1'); 
} 
+0

Это не помогает мне, мне нужно перенаправить страницу много раз ... – Jonathan

+1

Вам нужно остановиться в какой-то момент, иначе браузер будет жаловаться на бесконечный цикл. – JYelton

1

Я хотел бы предложить вам редизайн, что вы делаете. Перенаправление обратно в себя никогда не должно происходить более одного раза, без ввода пользователя, необходимого для продолжения цикла.

Как только браузер увидит даже малейшую возможность и бесконечную петлю, он сработает. Даже если у вас есть ($ ID == 100) {..STOP ..} к моменту достижения 100, браузер уже сломает ваш цикл, просто потому, что по отраслевым стандартам это сразу считается плохим дизайном, и именно поэтому ваш браузер уже запрограммирован таким образом, чтобы остановить это.

Можете ли вы рассказать, что именно вы на самом деле пытаетесь сделать с этим циклом. Я уверен, что у кого-то есть способ достичь того, чего вы хотите, не делая этого таким образом.

ОБНОВЛЕНИЕ ДЛЯ КОММЕНТИРОВАТЬ

Тогда вы можете захотеть взглянуть на AJAX или PHP API. Я понимаю, что вы имеете в виду и хотите сделать, что нужно делать в контролируемой среде, а не в цикле. Браузер никогда не допустит такой цикл. Итак, есть несколько способов сделать это. Вы можете сделать это с помощью метода на стороне клиента, где php предоставляет вам страницу для ajaxify содержимого из одного источника в другой источник. Или строго php, используя php API-методы для извлечения содержимого и вывода его обратно на сервер. Однако ни один из них не является концепцией новичков. :) если вы понимаете, о чем я.

+0

Идентификатор указывает на идентификатор статьи, которую мне нужно получить с веб-сайта, я хочу получить все статьи, поэтому я хочу сделать этот цикл .. от 1 до 9999, например, для извлечения всех. – Jonathan

0

ob_start(); session_start(); ?

if ( $_SESSION["id_old"] == $_GET['id']){ return false;} 

$ID = $_GET['id']; 
$newID = ++$ID; 

$_SESSION["id_old"]= $newID; 


header('Location: http://localhost/something/something.php?id='.$newID); 

exit; 

тест локальный/что-то/something.php ID = 22 -> локальный/что-то/something.php ID = 23 возвращение ложным;

0

Похоже, вы пытаетесь очистить большой объем данных от внешнего источника. Почему бы вам не запустить его как локальный скрипт на своем собственном компьютере, а не через браузер? Тогда вам не нужно беспокоиться о тайм-ауте вашего скрипта или обозревателе, обнаруживающем бесконечные перенаправления.

+0

Звучит неплохо, я делаю локально с использованием WAMP Server localhost, но как я могу это сделать без использования браузера или временного ограничения PHP? – Jonathan