Русскоязычные документы веб-мастеру готовы к употреблению
Где вы зарабатываете больше всего?
Яндекс.Директ
Google Adsens
Sape
Begun
Setlinks
Mainlinks
Blogun

Если ты устремился к этому тексту, то видимо уже не один раз надругался над своим сервантом самопальными скриптами и возникло желание усилить знания... Возможно это правильное решение, по сему начнём.

Узнать IP адрес вызвавшего скрипт:
$User_IP=$ENV{'REMOTE_ADDR'};
chomp ($User_IP);
unless ($User_IP){$User_IP='unknown';}
Переменная $User_IP будет содержать IP адрес.

Создать полный путь до скрипта (нужно для вставки пути в формы):
$ScrHost=$ENV{'HTTP_HOST'};
$ScrName=$ENV{'SCRIPT_NAME'};
($ScrName, $ScrName1) = split(/\?/, $ScrName);
$ScrFullPath="$ScrHost$ScrName";
$ScrFullPatha=substr($ScrFullPath, 0, 7);
$ScrFullPatha=~tr/a-z/A-Z/;
if ($ScrFullPatha ne 'HTTP://'){$ScrFullPath="http://$ScrFullPath";}
Переменная $ScrFullPath будет содержать полный путь к скрипту.

Имя браузера юзера:
$User_BrName=$ENV{'HTTP_USER_AGENT'};
chomp ($User_BrName);
unless ($User_BrName){$User_BrName='unknown';}
Переменная $User_BrName будет содержать имя браузера вида "Mozilla/4.51 ...".

Узнаём откуда перешли на наш скрипт:
$User_Reff=$ENV{'HTTP_REFERER'};
chomp ($User_Reff);
unless ($User_Reff){$User_Reff='unknown';}
$User_Reff =~ tr/+/ /;
$User_Reff =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Переменная $User_Reff будет содержать путь вида "http://server.ru/docum.htm...", причём
Unicode если имело место будет раскодировано.

Редиректить пользователя скриптом:
$URL_for_redirect='http://deface.ru/';

print "Location: $URL_for_redirect\n\n";


Вывести наш документ как HTML:
$Document='Мой html для вывода в браузер';

print "Content-Type: text/html\n\n";
print "$Document";


Вывести наш документ как обычный текст:
$Document='Мой текст для вывода в браузер';

print "Content-Type: text/plain\n\n";
print "$Document";
Отправить сообшение на e-mail:
$Mail_PRG="/usr/sbin/sendmail -t";
$Message_mail='Текст который будет в теле письма';
$Subject_mail='Текст в поле Subject письма';
$Mail_adr_FROM='my_mail@mail.ru';
$Mail_adr_TO='you_mail@mail.ru';

open(dAtA, "|$Mail_PRG") or die "Error Send mail message";
print dAtA "To: $Mail_adr_TO\n";
print dAtA "From: $Mail_adr_FROM\n";
print dAtA "Subject: $Subject_mail\n\n";
print dAtA "$Message_mail\n\n.\n";
close (dAtA);


Прочитать из файла и выдать GIF картинку:
Filename_gifack='filename.gif';

print "Content-Type: image/gif\n\n";
open yo_potokG,$Filename_gifack;
print <yo_potokG>;
close yo_potokG;


Прочитать из стандартного потока данные передаваемые пользователем:
read(STDIN, $bufferoks, $ENV{'CONTENT_LENGTH'});
@mazzive = split(/&/, $bufferoks);
foreach $elemenzz (@mazzive) {
($argumm, $value) = split(/=/, $elemenzz);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$inpdatz{$argumm} = $value;
}
$Mail_address=$inpdatz{'email'};
Переменная $Mail_address в данном случае будет содержать данные из поля с именем "email", формы вызвавшей скрипт.

Очищаем текст от тегов и заменяем перенс строки на код <Br>:
$Input_text='<b>Это текст</b>, для проверки.';

$Input_text=~s/\x0D//g; # Убиваем часть Win кода переноса строк (x0dx0a)
$Input_text=~s/</&lt;/g; # Теговые скобки меняем на их html код
$Input_text=~s/>/&gt;/g; # Теговые скобки меняем на их html код
$Input_text=~s/\x0A/<Br>/g; # Заменяем Unix код переноса строк на BR
$Input_text=~tr/\x00-\x1F/ /;
Естественно что если прогнать текст дважды через замену, то появившееся после первой
замены BR`ки будут расценены как нежелательные теги...

Реализуем некое подобие SII:
$File_html='filename.html';
$My_text='Текст который заменит в html конструкцию <!--KEYWORD-->';

open (TempDat, "$File_html") or die "Error open output doc";
$Temp_doc = join ('', <TempDat>);
close (TempDat);
$Temp_doc =~s#<!--KEYWORD-->#$My_text#sg;
print "Content-Type: text/html\n\n";
print "$Temp_doc";
Можно и в переменную $My_text загрузить другую html`ку, тем самым собрать документ вывода по кускам.

Запретить работать со скриптом пользователям с установленным IP (в том числе и с учётом маски, например 127.*.0.1, где * означает все адреса):
@Denied_IP=("127.0.0.1", "210.0.*.2", "211.0.0.*");

$Flag_Access=1;
$User_IP=$ENV{'REMOTE_ADDR'};
chomp ($User_IP);
unless ($User_IP){$Flag_Access=0;}
($nIP1,$nIP2,$nIP3,$nIP4) = split(/\./, $User_IP);
$nIP0=$nIP1+1;
$nIP0s=$nIP0;
if ($nIP0 < 1 || $nIP0 > 256){$Flag_Access=0;}
$nIP0=$nIP2+1;
$nIP0s=$nIP0s + $nIP0;
if ($nIP0 < 1 || $nIP0 > 256){$Flag_Access=0;}
$nIP0=$nIP3+1;
$nIP0s=$nIP0s + $nIP0;
if ($nIP0 < 1 || $nIP0 > 256){$Flag_Access=0;}
$nIP0=$nIP4+1;
$nIP0s=$nIP0s + $nIP0;
if ($nIP0 < 1 || $nIP0 > 256){$Flag_Access=0;}
if ($nIP0s < 5){$Flag_Access=0;}
for ($n=0; ($Denied_IP[$n] ne '' && $Flag_Access == 1); $n++){
$ndIP0=$Denied_IP[$n]; chomp ($ndIP0);
($ndIP1,$ndIP2,$ndIP3,$ndIP4) = split(/\./, $ndIP0);
if ($nIP1 eq '*'){$ndIP1=$nIP1;}
if ($nIP2 eq '*'){$ndIP2=$nIP2;}
if ($nIP3 eq '*'){$ndIP3=$nIP3;}
if ($nIP4 eq '*'){$ndIP4=$nIP4;}
if ($ndIP1 eq $nIP1 && $ndIP2 eq $nIP2 && $ndIP3 eq $nIP3 && $ndIP4 eq $nIP4){$Flag_Access=0;}
}
if ($Flag_Access == 1){Доступ разрешаем}else{Доступ закрыт}
Этот алгоритм не обрабатывает строки не_анонимных прокси серверов, его принцип, всему что непохоже на IP прикрывать досуп.

Проверка правильности E-mail адреса (довольно простая):
$Input_Email='mymail@mail.ru';

$Flag_Access=1;
$In_ln=split(//, $Input_Email);
if ($In_ln < 4){$Flag_Access=0;}
$In_ln=split(/\@/, $Input_Email);
if ($In_ln < 2){$Flag_Access=0;}
$In_ln=split(/\./, $Input_Email);
if ($In_ln < 2){$Flag_Access=0;}
$In_pr=$Input_Email;
$In_pr=~tr/*=^%&()[],?\\<>'"| ЙЦУКЕНГШЩЗХФЫВАПРОЛДЖЯЧСМИТЬБйцукенгшщзхфывапролджэячсмитьбю/!/;
$In_prn=index($In_pr, '!');
unless ($In_prn == -1){$Flag_Access=0;}
if ($Flag_Access == 1){Адрес верный}else{Адрес некорректен}


Проверка правильности URL адреса (довольно простая):
$Input_URL='mymail@mail.ru';
$Flag_Access=1;
$In_ln=split(//, $Input_URL);
if ($In_ln < 12){$Flag_Access=0;}
$In_ln=split(/:/, $Input_URL);
if ($In_ln < 2){$Flag_Access=0;}
$In_ln=split(/\./, $Input_URL);
if ($In_ln < 2){$Flag_Access=0;}
$In_pr=$Input_URL;
$In_pr=~tr/*=^()?&[],\\<>'"| ЙЦУКЕНГШЩЗХФЫВАПРОЛДЖЯЧСМИТЬБйцукенгшщзхфывапролджэячсмитьбю/Й/;
$In_prn=index($In_pr, 'Й');
unless ($In_prn == -1){$Flag_Access=0;}


Позволю себе сказать несколько слов на почти отвлечённую тему. Частенько я слышу, что программируя надо применять разнообразные модули, библиотеки, писать скрипты на программах - конструкторах... В тоже время я созерцаю как книги Д. Кнута растут в цене. Складывается прямо таки неприятная картина, будто программеров решили отучить думать, заставить их мозг повиноваться документации по модулям, прикрываясь вопросом: "Зачем дважды изобретать велосипед?". Кратко говоря, все эти модули, библиотеки... От лукавого это! Учитесь думать, а не программить как дядя приказал, возможно вы где-то и убьете немного больше времени, но по крайней мере станет приятно читать ваши исходники, именно ВАШИ, а не тупые вызовы модулей написанных яйцеголовыми дяденьками с монотонной серостью жизни и мысли, да и мысль ваша станет более чёткой и быстрой равно как и программы ;-)
С уважением, трогал пластик кнопок, 90hex.  

Комментарии