офтоп хелп по CGI (sh)

NeoLynx

Новичок
офтоп хелп по CGI (sh)

Наверняка народ грамотный пишет и на CGI, я так сеголня впервые столкнулся.

Мне нужно cgi-скрипту передать два параметра (пути).
Я их передал постом, получил на выходе:
f=http%2Ftest%2Fsite.zip&d=http%2Ftest

подскажите как отпарсить данные, чтобы получить:

f=http/test/site.zip
d=http/test

заранее спасибо
 

SiMM

Новичок
дели по &, потом делай что-то аналогичное urldecode (последовательности вида %[0-9A-F]{2} заменяешь на символ с указанным шестнадцатеричным кодом).
 

untied

Сдвинутый новичок
А что ты имеешь в виду под скриптом cgi?

Если это скрипт Perl, то у него есть специальный модуль CGI.pm для чтения параметров. Читай документацию по этому модулю (функция для получения параметра: param('name') )

Если это программа, созданная на другом языке программирования (к примеру, C), то нужно либо делать разбор параметров вручную, либо искать и подключать нужную библиотеку для работы с cgi.
 

NeoLynx

Новичок
Народ я ЧАЙНИК со свистком, я понимаю задним умом, что надо парсить, но не умею, синтаксиса не знаю.

Скрипт сейчас выглядит так:

#!/bin/sh

echo Content-type: text/plain
echo

echo "<b>метод POST</b><br>"
cat
echo "<br>"
set | grep CONTENT_LENGTH

/usr/bin/unzip -x ../$CONTENT_LENGTH -d ../http

ессно тут ничего не работает т.к.
CONTENT_LENGTH = f=http%2Ftest%2Fsite.zip&d=http%2Ftest
 

SiMM

Новичок
> синтаксиса не знаю
Чего? SH? Или URL-строки? Если второе - то я уже всё рассказал. Мог бы на PHP показать - SH не знаю.
 

NeoLynx

Новичок
а как на перле отпарсить строку:
CONTENT_LENGTH =t=http%2Ftest%2Fsite.zip&d=http%2Ftest
?
там в принципе всё похоже, мож прокатит или гугл подскажет.
 

untied

Сдвинутый новичок
Ну если строку нужно именно отпарсить, то в Perl есть регулярные выражения для таких целей (функции PHP типа preg_match() содраны с них).
Если же тебе нужно просто получить параметры (с уже преобразованными к человеческому виду символами %20), то просто подключай модуль CGI.pm и читай нужные параметры по именам:

PHP:
#!/usr/bin/perl -w

use CGI qw( :standard );

my $param_value;

$param_value = param('param_name');
То, что ты не знаешь Perl, не должно смущать. Точно так же ты не знаешь всех тонкостей sh. Зато документации по Perl и готовых решений гораздо больше.
 

Rezec

По пиву? (socket80)
Ну типа так:
file.cgi?example
PHP:
#!/bin/bash

echo 'Content-type: text/html;charset=KOI8-R';
echo;
echo;

echo '<html>';

TITLE=`cat title.htm`;
HEAD=`cat head.htm`;
MENU=`cat menu.htm`;

echo $TITLE;
echo $HEAD;
echo $MENU;
echo '<br>';
echo '<p>';

case $QUERY_STRING in
    how_it_was) echo `cat how_it_was.htm`;;
    example) echo `cat example.htm`;;
    *) echo `cat how_it_was.htm`;;
esac;

echo '</p>';
echo '</html>'
 

NeoLynx

Новичок
socket80, похоже только строку нужно парсить вот эту:

f=http%2Ftest%2Fsite.zip&d=http%2Ftest

на выходе должно быть:

f=http/test/site.zip
d=http/test


странно у меня не заработала простая конструкция...:
#!/bin/sh

echo 'Content-type: text/html;charset=KOI8-R';

TITLE=`cat title.htm`;
HEAD=`cat head.htm`;
MENU=`cat menu.htm`;

echo $TITLE;
echo $HEAD;
echo $MENU;

может я совсем всё не так делаю?
 
Сверху