Как поставить с разных страниц разные ссылки.

Итак все знают как поставить одну ссылку, и как поставить сквозняк.

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

Первым делом нам нужен собственно сам список ссылок. Правда если все ссылки будут вести на одну страницу, то достаточно обзавестись списком ключей, а формирование ссылки приписать в самом пшп коде.

Предположим этот файл назовется kei.txt

Можно конечно сделать просто вывод рандомной ссылки на странице

<?

$f_ar2 = file(‘kei.txt’);  // Связываемся с файлом.

$skokaslov = count($f_ar2); // Узнаем сколько в нем строк

$i = rand(0,$skokaslov); // Делаем рандомное число

echo $f_ar2[$i]; // Делаем вывод строки

?>

Или же можно одной строкой. Смысл один и тот же.

<? $f_ar2 = file(‘kei.txt’); echo $f_ar2[rand(0,count($f_ar2))]; ?>

Но такой вариант вряд ли отвечает нашим задачам, поэтому будем составлять список страниц и его соотносить с списком ссылок.

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

<?

$adres = $_SERVER[‘REQUEST_URI’].»\n»; //Считываем урл. Я сразу же приписываю знак переноса строки. чтобы потом с ним не возиться.

$f_ar2 = file(‘kei.txt’); // Уже знакомый файл ключей
if ( file_exists(‘site.txt’)){
$f_ar1 = file(‘site.txt’);}  // Та самая база урлов. Встроенна проверка на наличие. Если файла нет, то к нему не будет обращения и не будет ошибки, одна ко же в дальнейшем код скрипта сам его сформирует.

$skokaslov = count($f_ar2);//Так же получаем количество ключей. Это нам пригодится на случай если ключей окажется меньше чем страниц.

$str = -1; // Этакий «ключ» обозначающий что строка в базе урлов не найдена.

for ($i = 0; $i < count($f_ar1); $i++)  // Пускаемся в поиски

if ($adres == $f_ar1[$i]) {  // сравниваем соотвествтует ли текущий урл, урлу в базе
$str = $i;  // Если соответствует то переключаем ключ
echo  $f_ar2[$i%$skokaslov]; // Выводим строчку из списка ссылок. Знак процента обозначает остаток от деления.
break; //Прерываем цикл.
}

if ($str == -1){ // Если ключ так и не переключен, значит в базе урл не найден, а следовательно надо его добавить.
$fp = fopen(‘site.txt’, ‘a’); // Открываем файл на дозапись. Или же создаем если его не было до этого.

fwrite($fp, $adres); // Дозаписываем.

fclose($fp); // Закрываем файл.
echo  $f_ar2[$i%$skokaslov]; // Радуемся жизни. Ведь параметр $i на выходе из цикла как раз соответствует номеру последней строки.
}

?>

Разумеется вокруг строчки echo  $f_ar2[$i%$skokaslov]; можно что нибудь еще дописать на вывод. Ну это думаю понятно.

Замечания, Пожелания?
Если вам понравилось буду рад ссылке 🙂

Из минусов, думаю при больших объемах пробежка по списку урлов может нагружать ресурсы… Желающие вполне могут улучшить скрипт, да и вообще взять идею на вооружение. 🙂

UPD.

В каментах MrMozg подсказал функцию, с которой поиск по архиву можно реализовать намного проще.

Ну я и реализовал 🙂

<?
$adres = $_SERVER[‘REQUEST_URI’].»\n»;
$f_ar2 = file(‘kei.txt’);
if ( file_exists(‘site.txt’)){
$f_ar1 = file(‘site.txt’);}

$skokaslov = count($f_ar2);

$key = array_search($adres,$f_ar1); // та самая функция.
if ($key > -1) { // если значение есть в массиве то она выдаст его, это будет число больше чем -1, следовательно условие выполнится. А если значение не будет найдено, то уже пофиг, что выдаст функция, она все равно пойдет в else. 🙂
echo  $f_ar2[$key%$skokaslov];

}
else
{
$fp = fopen(‘site.txt’, ‘a’);
fwrite($fp, $adres);
fclose($fp);
echo  $f_ar2[count($f_ar1)%$skokaslov];
}

?>


Автор: Elsper.ru


VN:F [1.9.14_1148]
Rating: 10.0/10 (2 votes cast)
Как поставить с разных страниц разные ссылки., 10.0 out of 10 based on 2 ratings

12 thoughts on “Как поставить с разных страниц разные ссылки.

  1. Как всегда все элементарно просто. Код работает.
    Правда некоторые говорят цикл foreach работает быстрее чем for, при больших количествах страниц будет существенно.

    Благодарю Вас. Давно искал как это реализовать, но так и не придумал.

  2. Для поиска по массиву выгодно использовать встроенную функцию php array_search (www.php.ru/manual/function.array-search.html)

  3. Тут же все прокомментировано.
    И суть работы объяснена.

    Что именно не понятно?

  4. Они будут меняться только в первом варианте.

    В остальных двух вариантах специально ведется учет страниц, чтобы привязать номер ссылки к номеру страницы.

    Лучший код тот который идет самый последний.

  5. Нужна помощь. Ставлю на сайт твой срипт.
    Выскакивает:
    Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in /home/user/data/www/site.ru/linkz.php on line 3

    Parse error: syntax error, unexpected T_STRING in /home/user/data/www/site.ru/linkz.php on line 3

  6. Судя по всему ошибка в первое же строке. Ты кавычки нормальные ставил? А то на странице не те кавычки, видимо ВП переделал. Надо простые: «

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Спoнcopcкиe ссылки