Теперь поговорим о технической реализации. Сам скрипт ищи в конце поста. Про использование куки для определения того, куда редиректить, я уже писал в посте «Редирект новых и старых посетителей в разные места, редирект по номеру посещения«.
Для определения псевдослучайного числа от 1 до 100 на основе ip-адреса напишем функцию:
function getIPNum() {
$ip = ip2long($_SERVER["REMOTE_ADDR"]);
$sto = pow($ip + 57, 0.7)%100 + 1;
return $sto;
}
Адреса лендингов будем передавать в массиве со значениями. Каждой ссылке присвоим вероятность выпадания в процентах (а если точнее – умножим на сто).
Например,
$arr = array(
"http://google.com" => 30,
"http://yandex.ru" => 30,
"http://mail.ru" => 40);
Тут гугл откроется в 30% случаев, яндекс тоже в 30, а мэйл в 40 процентах. Скажу сразу, значение у последней ссылки может быть любым, и если сумма чисел будет меньше сотни, переход всё равно осуществится по последней ссылке. Ну и ссылок сколько угодно можно с разными вероятностями. Удобно?
Теперь функция выбора лендинга на основе числа от 1 до 100:
function chooseLink($arr, $num) { $rate = 0; while (($item = current($arr))!== FALSE) { $rate += $item; if ($num <= $rate) return key($arr); next($arr); } return key($arr); }
Итак, уже получаем адрес для ленда на основе ip:
$arr = array( "http://google.com" => 30, "http://yandex.ru" => 30, "http://mail.ru" => 40); function getIPNum() { $ip = ip2long($_SERVER["REMOTE_ADDR"]); $sto = pow($ip + 57, 0.7)%100; return $sto; } function chooseLink($arr, $num) { $rate = 0; while (($item = current($arr))!== FALSE) { $rate += $item; if ($num <= $rate) return key($arr); next($arr); } return key($arr); } $link = chooseLink($arr, getIPNum());
Хорошо, сделали. Но! Как мы помним из первой части, всё же сначала при посещении проверяем куки.
Что храним в куки? А давайте сразу ссылку туда зафигачим!
Итого,
if (isset($_COOKIE['keks']))
$link=$_COOKIE['keks'];
else {
$link = chooseLink($arr, getIPNum());
SetCookie("keks",$link,time()+3600*24*365*10);
}
Ну и в самом контенте ссылки на лендинг делать уже как <a href="<?php echo $link; ?>">йа ссылко</a>
Итак, при заходе посетителя
- При отсутствии куки (=новый посетитель) получаем значение функции chooseLink на основе IP-адреса посетителя.
- При наличии куки просто берём ссылку из него.
- Используем ссылку, полученную в пункте 1 либо в пункте 2.
Весь код для выбора ссылки:
30,
"http://yandex.ru" => 30,
"http://mail.ru" => 40);
function getIPNum() {
$ip = ip2long($_SERVER["REMOTE_ADDR"]);
$sto = pow($ip + 57, 0.7)%100;
return $sto;
}
function chooseLink($arr, $num) {
$rate = 0;
while (($item = current($arr))!== FALSE) {
$rate += $item;
if ($num <= $rate) return key($arr);
next($arr);
}
return key($arr);
}
if (isset($_COOKIE['keks']))
$link=$_COOKIE['keks'];
else {
$link = chooseLink($arr, getIPNum());
SetCookie("keks",$link,time()+3600*24*365*10);
}
?>
Ололо
Йа текст лендинга
А йа ссылко
...