С нами с 17.06.05
Сообщения: 270
Рейтинг: 183
|
Добавлено: 27/06/05 в 02:22 |
Ребята, может кто-нибудь кинуть самый простой маленький скриптик на перл, который просто редиректит на адреса по порядку из списка?
Ну типа redirect.cgi и к нему такой файлик redirect.txt где я укажу адреса. У меня такой был когда-то давно, но вот сейчас мне нужен а я нигде не могу найти Нашла только randomlink.cgi, он то что надо и по весу всего 3 кб, но он редиректит рандомно, а мне надо чтобы строго по порядку из списка.
|
|
|
|
С нами с 07.09.03
Сообщения: 4115
Рейтинг: 2060
|
Добавлено: 27/06/05 в 03:16 |
а че на перле?
на пхпе - 5 минут
|
|
|
|
старый зануда
С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361
|
Добавлено: 27/06/05 в 03:47 |
Код: | #!/usr/bin/perl
open (R,"+<redirect.txt");
flock (R,2);
@redirect = <R>;
$a=0;
foreach (@redirect) {
if ($a>0) {push(@new,$_);}
$a++;
}
chomp($redirect[0]);
push(@new,"\n$redirect[0]");
seek (R, 0, 0);
print R @new;
truncate(R,tell(R));
flock (R,8);
close (R);
print "Location: $redirect[0]\n\n";
exit; |
Для корректной работы скрипта в файле "redirect.txt" после последней строки ничего быть не должно
|
|
|
|
С нами с 17.06.05
Сообщения: 270
Рейтинг: 183
|
Добавлено: 27/06/05 в 04:02 |
Vlad_S, почему-то не работает
А полный путь до redirect.txt разве не надо прописывать?
Core, я не знаю почему перл , может и пхп пойдет. Нужно самый простой скриптик и чтобы не грузил сервер вообще никак. Лучше пхп?
|
|
|
|
С нами с 26.11.04
Сообщения: 119
Рейтинг: 145
|
Добавлено: 27/06/05 в 07:17 |
Код: | #!/usr/bin/perl
open (DAT,"redirect.txt");
flock (DAT,1);
@lines = <DAT>;
push(@lines,shift(@lines));
close (DAT);
open (DAT,">redirect.txt");
flock (DAT,2);
print DAT @lines;
print "Location: $lines[0]\n\n";
close (DAT); |
это работает
|
|
|
|
Раздаю инвайты, ищу линк-трейд
С нами с 20.08.04
Сообщения: 16668
Рейтинг: 8593
|
Добавлено: 27/06/05 в 07:42 |
Sveta_V писал: | Ребята, может кто-нибудь кинуть самый простой маленький скриптик на перл, который просто редиректит на адреса по порядку из списка? |
Кстати, я не понял - по порядку каждый клик, как в посл. скрипте (кстати, я бы не переписывал каждый раз редирект.тхт, мож список большой - я бы файл-семафор вел с № посл. редиректа), или каждого для серфера надо с начала списка начинать?
|
|
|
|
С нами с 17.06.05
Сообщения: 270
Рейтинг: 183
|
Добавлено: 27/06/05 в 08:43 |
pierx, твой тоже не работает
Может я что-то не так делаю? Я создаю redirect.cgi, заливаю его в cgi-bin, ставлю права 755.
Потом создаю redirect.txt, в нем пишу:
url1.com
url2.com
url3.com
Тоже заливаю в cgi-bin, ставлю 777. Вот мне нужно, чтобы я нажимала redirect.cgi на странице и открывался url1.com, а если еще раз нажму на ссылку, то уже url2.com и так далее.
|
|
|
|
Раздаю инвайты, ищу линк-трейд
С нами с 20.08.04
Сообщения: 16668
Рейтинг: 8593
|
Добавлено: 27/06/05 в 08:59 |
Ошибку дает? какую? может ты в блокноте пишешь, а потом льешь 1:1, а в винде перевод строки - 2 символа. на юниксе - один. Это наиболее распространенная ошибка
в урлах шттп пишешь?
на цги-бин какие права? (777 это круто )
ЗЫ скрипт не я писАл. Но могу и я
|
|
|
|
С нами с 17.06.05
Сообщения: 270
Рейтинг: 183
|
Добавлено: 27/06/05 в 09:09 |
500 ошибку выдает. Internal Server Error
redirect.txt оставила тот же, который уже работал нормально. От того скрипта, который рандомно из него ссылки выдергивает. Так что с ним все ок должно быть.
|
|
|
|
С нами с 17.06.05
Сообщения: 270
Рейтинг: 183
|
Добавлено: 27/06/05 в 09:12 |
777 на файл redirect.txt
на cgi-bin права я вообще не трогала, сейчас посмотрела - там стоит 750
|
|
|
|
Раздаю инвайты, ищу линк-трейд
С нами с 20.08.04
Сообщения: 16668
Рейтинг: 8593
|
Добавлено: 27/06/05 в 09:13 |
Код: | #!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "<b>ento proba - proba</b><br>"; |
залей и вызови, да в аську стукни (в профайле), что тут тереть ;)
|
|
|
|
старый зануда
С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361
|
Добавлено: 27/06/05 в 11:39 |
Sveta_V писал: | Vlad_S, почему-то не работает |
Если файлы redirect.cgi и redirect.txt лежат рядом - полный путь не нужен, все должно заливаться на хост в только в текстовом режиме (ASCII), права доступа на redirect.cgi - 755 на redirect.txt - 666, править Perl-скрипты под виндой можно только в обычном блокноте, если нет специального редактора, "продвинутые" клоны не годятся. Ну заливать над все это в папку "cgi-bin". Короче, учите матчасть
2Dimma, - каждая обработанная строка фактически состоит из двух частей URL+перевод строки, с которым тоже надо что-то делать, иначе в файле redirect.txt начнется аджап-сандал и все заглючит, разделенные во времени чтение и запись рано или поздно приведут к потере данных...
|
|
|
|
старый зануда
С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361
|
Добавлено: 27/06/05 в 12:07 |
pierx писал: | ...я бы файл-семафор вел с № посл. редиректа... |
Ты прав, так значительно изящнее
Код: | #!/usr/bin/perl
open (R,"redirect.txt");
@redirect = <R>;
close (R);
open (C,"c.txt");
flock (C,2);
$c = <C>;
flock (C,8);
close (C);
if (!$c) {$c = 0;}
print "Location: $redirect[$c]\n\n";
$c++;
if ($c == scalar @redirect) {$c = 0}
open (C,">c.txt");
flock (C,2);
print C $c;
flock (C,8);
close (C);
exit; |
|
|
|
|
Раздаю инвайты, ищу линк-трейд
С нами с 20.08.04
Сообщения: 16668
Рейтинг: 8593
|
Добавлено: 27/06/05 в 12:48 |
А так? (я правда кое-какие операторы забыл, потому частично ч/з одно место: Код: | /usr/bin/perl
$url="http://domain.com/"; # урл по умолчанию, если файл не откроем
if (open (DAT,"redirect.txt"))
{
flock (DAT,1);
@lines = <DAT>;
close (DAT);
$max=@lines;
if (open (DAT,"log.txt"))
{
flock (DAT,1);
$j = <DAT>;
close (DAT);
$j++;
if ($j>=$max) { $j=0; }
open (DAT,">log.txt");
flock (DAT,2);
print DAT $j;
close (DAT);
}
else
{
$j=0;
}
$url=@lines[$j];
}
print "Location: $url\n\n";
|
Пытался подобие проверки выполнить
|
|
|
|
старый зануда
С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361
|
Добавлено: 27/06/05 в 13:54 |
Можно и так, да и еще много чего можно, у каждого своя манера письма. Главное, чтобы работало. То, что я выложил здесь, было предварительно отлажено на сервере, поэтому за правильнось работы я ручаюсь...
|
|
|
|
С нами с 15.09.03
Сообщения: 484
Рейтинг: 210
|
Добавлено: 27/06/05 в 15:30 |
вот как действует женский ник на форуме ))
на подсознательном уровне )
|
|
|
|
старый зануда
С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361
|
Добавлено: 27/06/05 в 20:00 |
undef писал: | вот как действует женский ник на форуме... |
Если бы ты оказался в том же месте и в то же время, что и топикстартер, моя реакция была бы абсолютно такой же. Не стоит переоценивать силу женского обаяния, особенно в нашей проффессии...
Дело было вечером, делать было нечего
|
|
|
|
С нами с 13.05.04
Сообщения: 139
Рейтинг: 26
|
Добавлено: 28/06/05 в 18:45 |
Sveta_V писал: | Ребята, может кто-нибудь кинуть самый простой маленький скриптик на перл, который просто редиректит на адреса по порядку из списка?
Ну типа redirect.cgi и к нему такой файлик redirect.txt где я укажу адреса. У меня такой был когда-то давно, но вот сейчас мне нужен а я нигде не могу найти Нашла только randomlink.cgi, он то что надо и по весу всего 3 кб, но он редиректит рандомно, а мне надо чтобы строго по порядку из списка. |
Вот на php может подойдёт.
<?
session_start();
if (!isset($_SESSION['count'])){$_SESSION['count'] = "0";}
switch($_SESSION['count'])
{
case '0':
header("Location: http://domen.com");
$_SESSION['count']="1";
break;
case '1':
header("Location: http://domen1.com");
$_SESSION['count']="2";
break;
case '2':
header("Location: http://domen2.com");
$_SESSION['count']="3";
break;
case '3':
header("Location: http://domen3.com");
$_SESSION['count']="4";
break;
case '4':
header("Location: http://domen4.com");
$_SESSION['count']="5";
break;
case '5':
header("Location: http://domen5.com");
$_SESSION['count']="6";
break;
default:
header("Location: http://domen6.com");
$_SESSION['count']="0";
break;
}
?>
|
|
|
|
С нами с 17.06.05
Сообщения: 270
Рейтинг: 183
|
Добавлено: 28/06/05 в 23:38 |
Всем спасибо за помощь! Всем кто выложил скрипты поставила +
|
|
|
|
С нами с 29.05.04
Сообщения: 600
Рейтинг: 118
|
Добавлено: 29/06/05 в 11:55 |
А как будет выглядеть код если схема будет не: “юзер кликает один раз попадает туда, 2-о раз туда то, 3-ий туда то”, а первый юзер зашел и попал на стр.1 далее зашел второй уникальный посетитель и попал на стр.2 третий уникальный посет. попал на стр.3 и так далее.
|
|
|
|
С нами с 03.08.04
Сообщения: 129
Рейтинг: 263
|
Добавлено: 29/06/05 в 13:16 |
Мои две копейки в разговор.
Например, если взять за исходное использование PHP и сессий, то код Artful'а я бы немножко переделал
Плюс стал бы хранить URL'ы в отдельном файле (redirect.txt).
Это будет вариант, когда каждый юзер будет иметь свою собственную "последовательность посещаемых адресов", которая запомнится в данных сессии (это уже забота PHP).
Например, так:
Код: | <?php
# читаем все строки из файла
$lines = file('redirect.txt');
$urls = array();
# причёсываем строки, пустые игнорируем - получаем список урлов
for ($i = 0; $i < count($lines); $i++)
{
$line = trim($lines[$i]);
if ($line != '') $urls[] = $line;
}
# старт сессии
session_start();
# причесываем url_idx - текущий индекс URL'а в массиве
if ( (!isset($_SESSION['url_idx'])) || ($_SESSION['url_idx'] > count($urls)) )
$_SESSION['url_idx'] = 0;
# делаем редирект
header('Location: ' . $_SESSION['url_idx']);
# увеличиваем индекс следующего URL'а на следующий раз
$_SESSION['url_idx']++;
exit(0);
?> |
|
|
|
|
С нами с 03.08.04
Сообщения: 129
Рейтинг: 263
|
Добавлено: 29/06/05 в 13:21 |
История номер два. Мы хотим сделать, чтобы "последовательность посещаемых урлов" была единой для всех юзеров сразу. То есть каждый посетитель не имеет собственного "счетчика", а все вместе, кто сколько может - продвигают один общий счётчик. Почти как описал sex4you.
При этом, ради наглядности, мы продолжаем хранить верность PHP и его сессиям - добавленные строки помечены полужирным шрифтом .
Код: | <?php
# читаем все строки из файла
$lines = file('redirect.txt');
$urls = array();
# причёсываем строки, пустые игнорируем - получаем список урлов
for ($i = 0; $i < count($lines); $i++)
{
$line = trim($lines[$i]);
if ($line != '') $urls[] = $line;
}
# запрещаем использовать куки - зачем они, если ID сессии мы задаем сами...
ini_set('session.use_cookies', '0');
# ID сессии будет один для всех юзеров, где и как хранить - дело PHP
session_id('my_unique_12345');
# старт сессии
session_start();
# причесываем url_idx - текущий индекс URL'а в массиве
if ( (!isset($_SESSION['url_idx'])) || ($_SESSION['url_idx'] > count($urls)) )
$_SESSION['url_idx'] = 0;
# делаем редирект
header('Location: ' . $_SESSION['url_idx']);
# увеличиваем индекс следующего URL'а на следующий раз
$_SESSION['url_idx']++;
exit(0);
?> |
PS: где нужно - можно вставить @ для отключения сообщений об ошибках. Предполагается, чот файл redirect.txt существует.
PSS: файл redirect.txt должен иметь по 1 адресу (включая "http://" ) в строке, пустые строки игнорируются, пробелы по краям строк не имеют значения.
PSSS: варианты исполнения не претендуют на единственность или на то, что они являются наилучшими.
|
|
|
|
Раздаю инвайты, ищу линк-трейд
С нами с 20.08.04
Сообщения: 16668
Рейтинг: 8593
|
Добавлено: 29/06/05 в 13:34 |
Я общался с ней, ей не надо, чтоб каждому своя база велась. Просто пропорциональное раскидывание кликов - но по порядку, а не рандомно. Ссылок вроде она много планирует, так что одного попадание юзера на тот же урл можно не рассматривать.
ЗЫ - пока писал - еще пост появился
|
|
|
|
С нами с 03.08.04
Сообщения: 129
Рейтинг: 263
|
Добавлено: 29/06/05 в 16:58 |
pierx писал: | не надо, чтоб каждому своя база велась |
В таком случае - см. мой предыдущий пост как один из вариантов :-)
|
|
|
|