Переадресация в ПХП

1. jast (12.08.2012 / 22:01)
В общем есть сайт и надо сделать таким образом что бы каждый 5 клик уходил по одному адресу, каждый 10 по другому адресу, 15 по третему адресу.
как это реализовать?

2. Петр (13.08.2012 / 12:56)
<?php 
$click=file_get_contents('click.txt');
$loc=array('site0', 'site5', 'site10', 'site15');
header('Location: '.$loc[($click%5)?0:( $click/5)]); 
file_put_contents('click.txt', $click+1);
?>


3. Петр (13.08.2012 / 13:15)
Точнее, не $click+1, а ($click+1)%16.

4. jast (13.08.2012 / 14:14)
А click.txt что это?

5. Игорь (13.08.2012 / 14:19)
4: jast, Файл "счётчик".

6. JustZero (13.08.2012 / 14:36)
1: jast, допустим по одному адресу перешли 5 раз, он уже не нужен будет?

7. T-S (13.08.2012 / 16:29)
jast (12 Августа 2012 / 22:01)
В общем есть сайт и надо сделать таким образом что бы каждый 5 клик уходил по одному адресу, каждый 10 по другому адресу, 15 по третему адресу.
как это реализовать?
проще рандом сделать но я толком не понял как это каждый пятый десятый клик. мсмысле каждое десятое выполнение скрипта? и каждый десятый клик всех пользователей или для каждого отдельный счетчик неужели так трудно нормально задать вопрос не думаю что здесь есть какие то уникумы которые читают мысли.
Вообщем вот код, каждое десятое 5 выполнение этого кода будет переправлять юзера на случайную ссылку.
Счетчик определен для каждого пользователя отдельно. Надо ставить до первого выхлопа если не используется буферизация. Впроцем сделал что бы если попадется выхлоп в браузер перед кодом то все равно сработает переадресация посредством JS или же если не поддерживается тогда средствами мета тега
<?php
if ( !isset( $_SESSION ) ) {  // если сессия не обьявлена
    session_name( 'SID' );    // указать имя для сессии
    session_start();          // запустить конструктор сессиии
}

$link   = array();               // Обявляем массив
$link[] = 'http://visavi.net/';  // Добавляем в массив ссылку http://visavi.net/
$link[] = 'http://google.com/';  // Добавляем в массив ссылку http://google.com/
$link[] = 'http://wapinet.ru/';  // Добавляем в массив ссылку http://wapinet.ru/
// И так у нас в массиве три ссылки
$c = sizeof($link);
if ( $c > 0 ) {
    if ( !isset( $_SESSION['redirect'] )
        $_SESSION['redirect'] = 0;
    if ( ++ $_SESSION['redirect'] >= 5 ) {
        $_SESSION['redirect'] = 0;
        $key = mt_rand( 0, ( $c - 1 ) );
        if ( isset( $link[$key] ) ) {
            @header( 'Location: ' . $link[$key] );
            echo '<script type="text/javascript">';
            echo ' location.href="' . $link[$key]  . '"; ';
            echo '</script>';
            echo '<noscript>';
            echo '<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=' . $link[$key]  . '">';
            echo '</noscript>';
            exit;
        }
    }
}
С тебя 5 баксов на кошель Z411098196540

8. T-S (13.08.2012 / 16:50)
Этот код должен работать строго по очереди.
<?php
if ( !isset( $_SESSION ) ) {  // если сессия не обьявлена
    session_name( 'SID' );    // указать имя для сессии
    session_start();          // запустить конструктор сессиии
}
$step = 5;
$link   = array();               // Обявляем массив
$link[] = 'http://visavi.net/';  // Добавляем в массив ссылку http://visavi.net/
$link[] = 'http://google.com/';  // Добавляем в массив ссылку http://google.com/
$link[] = 'http://wapinet.ru/';  // Добавляем в массив ссылку http://wapinet.ru/
// И так у нас в массиве три ссылки
$c = sizeof($link);
if ( $c > 0 ) {
    if ( !isset( $_SESSION['redirect'] ) )
        $_SESSION['redirect'] = 0;
    $buffer = (++ $_SESSION['redirect'] / $step);
    if ( !is_float( $buffer ) && $buffer) {
        if ($buffer > $c) {
            $buffer = $_SESSION['redirect'] = $step;
        }
        $key = mt_rand( 0, ( $buffer - 1 ) );
        if ( isset( $link[$key] ) ) {
            @header( 'Location: ' . $link[$key] );
            echo '<script type="text/javascript">';
            echo ' location.href="' . $link[$key]  . '"; ';
            echo '</script>';
            echo '<noscript>';
            echo '<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=' . $link[$key]  . '">';
            echo '</noscript>';
            exit;
        }
    }
}
Код не тестил сам проверь если не будет работать отпиши.

9. jast (13.08.2012 / 17:13)
6. Доктор Зло, только когда 20 клик будет тогда и будет переадресация на первый адрес

Так надо что бы перещли не пять раз, а допустим каждый 5 клик был переадресован, то есть если даже нажали на раздел Игры но этот клик оказался 5 то он ушел

10. T-S (13.08.2012 / 19:22)
Я тебе дал код выше подходит не подходит?

Добавлено через 01:31 сек.
if ( !isset( $_SESSION['redirect'] )
Поставь еще одну скобку поставь в конце.
if ( !isset( $_SESSION['redirect'] ) )

11. jast (13.08.2012 / 19:39)
10. T-S, вышло так что 5 клик пощол на визави, а следущая переадресация была на 5, а 10 кликов спустя и снова на визави, третя переадресация прошла 15 кликов спустя на вапинет.
Страницы вроде дольше стали грузится или это мне показалось.

12. T-S (13.08.2012 / 19:47)
Показалось первый код ниписан на высшем уровне там нет чему грузить.
Второй тоже не грузит.
Но не уверен что второй будет правильно работать. Ты какой первый вариант тестировал или второй?

13. jast (13.08.2012 / 19:55)
И первый и второй, но 1 больше подходит правда клики идкт только между гугл и вапинет

14. T-S (13.08.2012 / 20:47)
Потестируй должен и и вапнет сработать

15. Андрюха (13.08.2012 / 20:54)
12. Хорош уже людей смешить D

if ( !isset( $_SESSION ) ) {  // если сессия не обьявлена

    session_name( 'SID' );    // указать имя для сессии

    session_start();          // запустить конструктор сессиии

}

Ты ЭТО назвал высшим уровнем? D

Добавлено через 03:23 сек.
ТС, тебе нужно переадресовывать клики одного и того же юзера или вообще все клики?

16. Серёга (13.08.2012 / 21:03)
Зделай два ранда от 1 до 5 и пипец. Один вывод сылок второй посещение сайта. Ато как целка черер один и тотже промежуток скидка 5 %. smile

17. jast (13.08.2012 / 21:10)
15. Wapruks, желательно одного и тогоже, а то так бывает и на сайт не попадаешь, сразу переадресация

18. T-S (13.08.2012 / 21:11)
15. Wapruks, ты бл. умник что тебе не нравится?
Пиз. бы меньше а?
Ты реально ответь что тебе не нравится в моем коде?

19. Андрюха (13.08.2012 / 21:14)
18. Мне не нравится условие, которое всегда будет выполнятся ибо недоступен массив $_SESSION пока сессии не включены. Еще мне не нравится $c = sizeof($link);

if ( $c > 0 ) {

это условие. Ты же самолично записал в массив 3 значения, когда это оно интересно может быть меньше или равно нулю?

20. T-S (13.08.2012 / 21:15)
16. RSV, Норм идея только вот не от одного до пяти а например на шаг 3-7 т.е. каждый третий - седьмой переход.

Добавлено через 07:38 сек.
19. Wapruks, первое почитай мануал про isset ибо условие проверяет на доступность переменной тобишь если её нет тогда запускается сессия. Здесь ты проотвечался и докозаль только то что не знаешь пыху.
Второе $c = sizeof($link);
Здесь же расчитано если он добавит еще несколько линков и их будет не три а более или менее.
Третье if ( $c > 0 ) {
ЭТо привычка всегда проверять проверять и проверять и это хорошая привычка ибо так пишутся стабильные(надежные скрипты) и я не собираюсь избавлятся привычки проверять на доступность конфига потому что конфиг как правило всегда редактируют и его может вообще не быть.
Так что сказать я тебе могу одно.
Ты кто такой? Давай дасвидания!

21. Андрюха (13.08.2012 / 21:32)
Да не будет $_SESSION доступна в твоем условии ПОЛЮБОМУ!

"Третье if ( $c > 0 ) {"

Он че, добавит ссылок меньше нуля? xaxa

22. T-S (13.08.2012 / 21:52)
Wapruks (13 Августа 2012 / 21:32)
Да не будет $_SESSION доступна в твоем условии ПОЛЮБОМУ!

"Третье if ( $c > 0 ) {"

Он че, добавит ссылок меньше нуля? xaxa
Ты что лось вообще он может вообще не добавить ниодной ссылки и это будет ноль причем здесь меньше нуля я не пойму там стоит знак больше нуля ты вообще кодить то умеешь или так слышал что то где то?
На счет певого вопроса почему же ты такой упертый.
Я не собираюсь тебе еще что то доказывать, так как ты вообще не знаешь что такое php.
Вот тебе в доказательство пример выполнение кода для разрушение твоей теории.
<?php
if (!isset($_SESSION)) {
    session_start();
    echo 'session started<br />';
} else 
    echo 'already running<br />';


if (!isset($_SESSION)) {
    session_start();
    echo 'session started<br />';
} else 
    echo 'already running<br />';


if (!isset($_SESSION)) {
    session_start();
    echo 'session started<br />';
} else 
    echo 'already running<br />';
Результат выполнения
session started
already running
already running
Да и хватит срать в тему если у тебя будет еще какая то теория по поводу моего кода то напиши пожалуйста мне в асю я тебе постараюсь обьяснить. Мож и правда где то опечатался но на данный момент ты ничего не толкового не показал только тему перепортил

Добавлено через 06:51 сек.
И совет на будущее почитай мануал очень полезная книга темболее для тебя

23. Андрюха (13.08.2012 / 22:00)
Ты походу реально не понимаешь че ты пишешь. У тебя первым действием, когда еще небыло подключения сессий вывелось то что? Прааавильно, session started, садись 4. Далее, т.к первое условие вернуло true и сессии подключились у тебя уже доступен $_SESSION и поэтому выводит alredy running.
Поэтому в начале скрипта твое глупое условее НЕ НУЖНО.

Занавес, апплодисменты. А ты думай прежде чем писать

Добавлено через 04:23 сек.
И совет на будущее почитай мануал очень полезная книга темболее для тебя

И это говоришь мне ты )

24. T-S (13.08.2012 / 22:11)
Не ну ты бин вообще красавец скажы пожалуйста что будет если выше в человека в скрипте уже запущенная сессия?
Я тебе отвечу выскочит Notice: A session had already been started - ignoring session_start()
Бля корочь пошел нахрен не собираюсь я тебе больше ничего обьяснять. Ты ему пытаешься разжевать а он как баран уперся на своем.
Ладно пусть я буду не прав. И мой код полная лажа. Придупреждение для автора темы пускай не искользуеть мой код он дыряв как сыто.
Wapruks сейчас тебе все сделает все напишет как надо.
Мы ждем твоего варианта давай лошок в перед. Посмотрю я на твой код

Добавлено через 02:48 сек.
За лошка извиняюсь может быть ты и не лошок. Все зависит от твоего кода который ты сейчас выложишь

25. Андрюха (13.08.2012 / 22:17)
Я не говорю, что твой код дырявый.

Кто будет подключать сессии несколько раз то? Ты не волнуйся, все у тебя еще наладится с кодом и ты перестанешь писать условия вроде
$a = 1;
if ($a > 1)

Не нервничай ты так. Все через это проходили

Добавлено через 01:21 сек.
Ты бы отредактировал сообщение пока в баню не ушел

26. T-S (13.08.2012 / 22:22)
Напиши свой вариант. Эначе так не честно ты меня тут обосрал и остался сухим.
Давай свой вариант я жду эначе ты вообще останешься балаболом.

27. Андрюха (13.08.2012 / 22:27)
А я что, обещал что-то кому то? Успокойся уже, я понял, что ты типа защищаешься от ошибки так (что конечно тоже бредово. Кто будет два раза сессии подключать?).

28. Андрюха (14.08.2012 / 16:05)
В общем я был не прав ) Прошу прощения. Я сразу не понял, что ты имеешь ввиду проверяя существование $_SESSION. А на счет проверки if ($c > 0)... я думаю, что раз автору оно нужно, то там точно будут записи

URL: https://visavi.net/topics/33870