|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Sapozhnikov 2:5020/400 18 Aug 2000 04:04:34 To : All Subject : Re: counter -------------------------------------------------------------------------------- sto пишет в сообщении <8ngcap$2mj$1@kmk.kemerovo.su> ... >Уже некоторое время пользуюсь скриптиком и вот приспичило >вместо одного параметра отсылать два, ну и написал: >"/cgi-bin/counter.cgi?data/count.txt&1" и скрипт перестал работать. >Глядя в него увидел следующее: >... >if ($ARGV[0] ne "") > > $countfile=$ARGV[0]; >} >if ($ARGV[1] ne "") > > $table=$ARGV[1]; >} >... >И вот возник вопрос разве так выбираются параметры из строки URL? >Если можно и так, то какой разделитель надо ставить? Бывают письма на которые не знаешь как и ответить... Все не просто неправильно, а неправильно на несколько уровней вглубь. Во-первых: даже если параметры и передавались бы в коммандной строке (чего известные мне серверы не делают, а если бы и делали - это было бы их частным отступлением от стандарта CGI), то отсутствие параметра не есть пустая строка. Мало того - это даже не undef (хотя на defined проверять можно) - это просто отсутствие элементов в массиве @ARGV. Во-вторых: при передаче параметров методом GET (а судя по URL, так оно и есть), параметры передаются в переменной окружения QUERY_STRING. То есть доставать их надо: my ($countfile,$table)=split /&/,$ENV{QUERY_STRING}; В-третьих: скоро понадобится ввести третий. Потом четвертый. Потом первый и второй сделать опциональными... Лучше с самого начала приучаться к именованным параметрам типа key=value, RFC не запрещает использование неименованных, но зачем создавать себе трудности. В-четвертых: часть символов не может быть использована в URL. И посему при передаче заменяется на последовательность %nn где nn - две шестнадцатеричные цифры. Т.е. в общем случае (а нигде не указано обратного), мы должны произвести еще и обратное преобразование. В-пятых: вы уже созрели чтоб набрать perldoc CGI (если нужно действительно написать скрипт) или прочесть доку по URL,HTTP,CGI... в общем целая пачка RFC, всех номеров навскидку не припомню (это если действительно интересно как оно все работает). В-шестых: но даже модуль CGI не спасет Вас если кто-то передаст первым параметром не data/count.txt, а скажем /etc/passwd... Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/657762978167.html, оценка из 5, голосов 10
|