Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 [php] как не зациклить?  [new]
yarnik
Member

Откуда: Kiev
Сообщений: 311
Как сделать чтобы чтобы максимум закилилось на 5 раз?
function make_curl($url) {
	make_curl($url);
}
13 дек 18, 15:35    [21763119]     Ответить | Цитировать Сообщить модератору
 Re: [php] как не зациклить?  [new]
vkle
Member

Откуда: Самара
Сообщений: 14631
В приведенном коде рекурсия в явном виде. У рекурсии есть глубина вложенности. Как вариант, можно добавить второй параметр и анализировать его.
Но если Вам нужно именно максимум N вызовов функции, то гораздо проще (и понятнее) написать цикл.
13 дек 18, 15:47    [21763141]     Ответить | Цитировать Сообщить модератору
 Re: [php] как не зациклить?  [new]
yarnik
Member

Откуда: Kiev
Сообщений: 311
я написал примитивно чтобы не загружать скрипт,
на самом деле он выглядит более обьемно, в данном случае это:
function make_curl($url) {
	if ($code == 301 || $code == 302 || $code == 303) {
		make_curl($url);
	}
}

Но есть сайты, которые определяют что к ним конектятся програмно и все время выдают редирект.
Вот я и хочу указать максимальное количество попыток
13 дек 18, 16:35    [21763207]     Ответить | Цитировать Сообщить модератору
 Re: [php] как не зациклить?  [new]
vkle
Member

Откуда: Самара
Сообщений: 14631
Что мешает использовать CURLOPT_FOLLOWLOCATION для следования по редиректам + CURLOPT_MAXREDIRS для ограничения количества переходов?
13 дек 18, 17:09    [21763244]     Ответить | Цитировать Сообщить модератору
 Re: [php] как не зациклить?  [new]
yarnik
Member

Откуда: Kiev
Сообщений: 311
1. CURLOPT_FOLLOWLOCATION у меня не работает
2. мне нужно не знать сколько было редиректов

а по сути решение может кто то предложить?
13 дек 18, 20:04    [21763438]     Ответить | Цитировать Сообщить модератору
 Re: [php] как не зациклить?  [new]
yarnik
Member

Откуда: Kiev
Сообщений: 311
я решил так:
$redirect_count = 0;
function make_curl($url) {
	global $redirect_count;
	if ($redirect_count > 4) { echo "redirect_count > 3"; }
	elseif ($code == 301 || $code == 302 || $code == 303) {
		$redirect_count++;
		make_curl($url);
	}
}
13 дек 18, 20:43    [21763456]     Ответить | Цитировать Сообщить модератору
 Re: [php] как не зациклить?  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13507
yarnik
1. CURLOPT_FOLLOWLOCATION у меня не работает

Вы какой-то особенный, что оно у вас не работает?


yarnik
2. мне нужно не знать сколько было редиректов

http://php.net/manual/ru/function.curl-getinfo.php
CURLINFO_REDIRECT_COUNT - Число перенаправлений с включенной опцией CURLOPT_FOLLOWLOCATION


yarnik
а по сути решение может кто то предложить?

продолжай писать велосипеды.
14 дек 18, 09:15    [21763656]     Ответить | Цитировать Сообщить модератору
 Re: [php] как не зациклить?  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13507
автор
if ($redirect_count > 4) { echo "redirect_count > 3"; }

Л - логика!
14 дек 18, 09:16    [21763657]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить