LINUX.ORG.RU

Передать параметры cgi shell-скрипту

 , ,


0

1
> cat olo.sh 
#!/bin/sh

echo
echo arguments:
echo '$@' = "$@"

Всё как положено, права на выполнения и так далее.

Заходим по адресу http://100.500.100.500/cgi-bin/olo.sh?123

И ничего, аргументы не принимаются, пропадают где-то

arguments:
$@ =
> lighttpd -v
lighttpd/1.4.32 (ssl) - a light and fast webserver
Build-Date: Dec 11 2012 09:23:30
> uname -sr
FreeBSD 9.0-RELEASE-p5

В чём может быть дело? Заранее благодарю за ответ.

★★★★★

Это же CGI.

echo "$QUERY_STRING"

Кроме того, скрипт должен был вывести хэдер Content-type:, а в противном случае должна была получиться ошибка 500. Разве нет?

AITap ★★★★★
()
Последнее исправление: AITap (всего исправлений: 1)

Вот тебе скриптик. Работает и с POST, и с GET. Инициализирует переданные переменные их значениями. Например, строка запроса вида "VAR1=VAL1&VAR2=VAL2" преобразуется так, что потом "$VAR1" будет иметь значение "VAL1", а "$VAR2" — "VAL2".

#!/bin/sh
#Converts Data sent by method Post or Get
# into stdout like param1 name1 param2 name2 etc.
if [ "$REQUEST_METHOD" = "POST" ] ; then
    QUERY_STRING=`cat -`
fi

line=`echo $QUERY_STRING|sed 's/&/ /g'`

for pair in $line
do
    name=`echo $pair|sed 's/=/ /g'|awk '{print $1}'`
    type=`echo $pair|sed 's/=/ /g'|awk '{print $2}'|sed -e 's/%\(\)/\\\x/g'|sed 's/+/ /g'`
    CNTR=0
    NAME=$name
    while [ "${!name}" != "" ]
    do
        CNTR=$[ $CNTR + 1 ]
        name="${NAME}$CNTR"
    done
    eval ${name}=\"${type}\"
    printf "${name}=\"${type}\"\n"
    [ "${type}" = "" ] && eval ${name}="NULL"
done

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Велосипед. Для этого есть Bashlib.

Просто подключаешь скрипт в начале и всё.

http://localhost:8080/script.sh?t=test

#!/bin/bash

. /usr/local/bin/bashlib

echo "Content-Type: text/plain; charset=UTF-8"
echo ""

t=`param t`

echo "$t"

firestarter ★★★☆
()
Последнее исправление: firestarter (всего исправлений: 2)
Ответ на: комментарий от Eddy_Em

что потом «$VAR1» будет иметь значение «VAL1», а «$VAR2» — «VAL2».

А $PWD — VAL3.

PolarFox ★★★★★
()
Ответ на: комментарий от firestarter

CGI само по себе сейчас извращение, вроде.

Отнюдь. Вебсокеты пока что только-только набирают обороты. Так что, кроме CGI и SSI никаких средств общения с сервером по сути и нет!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Отнюдь. Вебсокеты пока что только-только набирают обороты. Так что, кроме CGI и SSI никаких средств общения с сервером по сути и нет!

Дык на смену CGI пришёл FCGI.

firestarter ★★★☆
()
Ответ на: комментарий от firestarter

Fast CGI нужны только при очень большой нагрузке.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от AITap

Кроме того, скрипт должен был вывести хэдер Content-type:, а в противном случае должна была получиться ошибка 500. Разве нет?

Не. От сервака зависит и настроек.

Suntechnic ★★★★★
()
Ответ на: комментарий от Eddy_Em

Передаваться будет через командную строку.

IPR ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.