Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   Нужно написать Микро PERL (cgi) Скрипт :) (http://forum.sape.ru/showthread.php?t=42290)

MS555 26.11.2009 16:21

Нужно написать Микро PERL (cgi) Скрипт :)
 
Возникла проблема) Нужно написать маленький Perl скрипт для сайта а я не разбираюсь в этом давно уже))

Вообщем нужно сделать так:

есть файл index.pl

лежит в domen.ru/cgi-bin/index.pl

при запросе domen.ru/cgi-bin/index.pl?action=main должна открываться одна страничка
при запросе domen.ru/cgi-bin/index.pl?action=info должна открываться другая)

всего страничек надо 3 ) лучше чтоб они открывались один в один из файлов типа main.html info.html - сделать вообщем нужно что то типа include как в php

Кто возьмётся?) Даже заплачу 50 WMR норм?)
Помогите :)

Alexey 26.11.2009 17:34

Плюньте вы на этот Perl, некрофилия еще никого до добра не доводила.

Да и URL domen.ru/cgi-bin/index.pl?action=main в 21м веке должно быть стыдно на сайте иметь...

MS555 26.11.2009 17:43

Alexey, да я понимаю) у меня проблема специфическая) нужно сделать именно на perl странички..

pluto 26.11.2009 20:01

Если я все правильно понял, то можно так:

#!/usr/bin/perl -w
use Fcntl;

$method=$ENV{'REQUEST_METHOD'};
if ($method eq "POST") {read(STDIN,$form_data,$ENV{'CONTENT_LENGTH'});}
else {$form_data=$ENV{'QUERY_STRING'};}

@pairs=split(/&/,$form_data);

foreach $pair (@pairs)
{
($name,$value)=split(/=/,$pair);
$ddd{$name}=$value;
}

if (exists $ddd{'action'}) {
print "Location: http://www.site.ru/".$ddd{'action'}.".html\n\n"; exit;
}

откроются странички типа main.html и т.д.
Не пинайте - я не особый знаток perl'а

MS555 26.11.2009 21:21

Стоп) странички должны не открываться а показываться )) ну то есть текст должен показываться разный) взятый например из страничек рядом лежащих в папке

pluto 26.11.2009 22:13

тогда вот так

#!/usr/bin/perl -w
use Fcntl;

$pth=$ENV{'SCRIPT_FILENAME'};
$pth=~s/cgi-bin.*//; # я так внутренний путь к папке с файлами html вычисляю

print "Content-type: text/html;charset=Windows-1251\n\n";

#print $pth;

$method=$ENV{'REQUEST_METHOD'};
if ($method eq "POST") {read(STDIN,$form_data,$ENV{'CONTENT_LENGTH'});}
else {$form_data=$ENV{'QUERY_STRING'};}

@pairs=split(/&/,$form_data);

foreach $pair (@pairs)
{
($name,$value)=split(/=/,$pair);
$ddd{$name}=$value;
}

if (exists $ddd{'action'}) {
#print "Location: http://www.site.ru/".$ddd{'action'}.".html\n\n"; exit;

open FO, "<".$pth.$ddd{'action'}.".html"; @html= <FO>; close FO;

foreach (@html) {
print;
}


}
exit;


файлы .html лежат в корневой

Добавлено через 20 минут
и можно заменить

foreach (@html) {
print;
}

на

print @html;

Neveykov 27.11.2009 01:53

перл да ну его!
пхп рулит, а пхп 6 всем покажет

Добавлено через 1 минуту
вот мот пригодится ссылка http://bishome.ru/load/358

MS555 01.12.2009 01:05

Чёто ничё не катит) вот нашёл и переписал сам скрипт)

#!/usr/bin/perl


$temp=$ENV{'QUERY_STRING'};
@pairs=split(/&/,$temp);
foreach $item(@pairs) {
($key,$content)=split (/=/,$item,2);
$content=~tr/+/ /;
$content=~ s/%(..)/pack("c",hex($1))/ge;
$fields{$key}=$content;
}

print "Content-type: text/html\n\n";
open (HEAD, "header.txt");

@head = <HEAD>;
close (HEAD);
foreach $line (@head) {
print "$line";
}
open(NUMBER, "$fields{'action'}");
@text = <NUMBER>;
close(NUMBER);
foreach $line (@text) {
print "$line";
}

open (FOOT, "footer.txt");
@foot = <FOOT>;
close (FOOT);
foreach $line (@foot) {
print "$line";
}

==

рядом лежат footer.txt header.txt и также любой файл который надо открыть как HTML например index.html
при запросе file.pl?action=index.html откроется header.txt+index.html+footer.txt

Всё ))

pluto 01.12.2009 08:26

Цитата:

Сообщение от MS555 (Сообщение 640667)
Чёто ничё не катит) вот нашёл и переписал сам скрипт)
Всё ))

Перед тем как выложить скрипт я проверил его на рабочем сайте. Все работает.

Решили свою проблему - ну и прекрасно. Алес гуд.

Yappie 03.12.2009 09:29

(Пока отвечал - esetnod удалил свой вопрос :) )

Цитата:

Сообщение от esetnod (Сообщение 643944)
Дабы не создавать новой темы, помогите написать скриптик, который открывает файл, лежащий с ним в одном каталоге, ищет в нем все записи вида "version=1234" (1234- разные числа) и выводит самое большое число. :)

На перле (давно не писал, могу и ошибится):

Код:

open(D, "a.txt");
$txt = join('', <D>);
$txt =~ s/version=(\d+)/if($1>$max){$max=$1}/gies;
print $max;

А если б на питоне - то:

Код:

import re
print max(map(int, re.findall(r'version=(\d+)', open('file.txt').read())))

P.S. К вышесказанному присоединюсь - для разработки сайтов Perl использовать не стоит.


Часовой пояс GMT +3, время: 13:23.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.