2011年10月1期WebProgshスクリプトでcgi
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
【待望】PerlユーザのためのPHP入門
PostgreSQL 2テーブル目
WEBプログラマ25歳定年説
縦書き掲示板
shスクリプトでcgi
- 1 :03/03/20 〜 最終レス :11/01/26
- Perl vs. PHP vs. Rubyと言われているこの時代に
shスクリプトでcgiを書いている奴っていますか。
周りからは生きた化石と言われながら、頑固一徹
shスクリプトのcgiの可能性にかけている。
そんなcgi職人、集まれ!
- 2 :
- Cでcgiを書いてますが何か?
↓C++で書いてるヤシ
- 3 :
- 低パワーマシンで perl や python では重すぎる
CGI でシェルスクリプト使ったりします。
- 4 :
- http://lib.city.shinagawa.tokyo.jp/cgi-bin/Swwwsmin.sh
これってやっぱりシェルスクリプトなのかなぁ。
- 5 :
- #!/bin/sh
echo "Coutent-type:text/html;charse:Shift_JIS\r\n\r\nってよし"
- 6 :
- かけないこともないが
perlで重くてシェルスクリプトで軽いってことは
そんなにないだろう?
もしそうなのならマシンを見直す必要があると思うが・・・
WinのバッチファイルでCGI組んでるやつの方が
まだネタになるぞ
- 7 :
- > WinのバッチファイルでCGI
すごい穴になりそうだな
- 8 :
- shスリプトでここまでできたという事例が聞ければうれしっす。
/bin/sh
- 9 :
- >>7
つぅか標準入力を扱えない時点でCGI失格だと思われ。
- 10 :
- C++ with MFC で家庭内LAN用のCGI作ろうとしてますが、何か?
# CStringマンセー
- 11 :
- 機会があればschemeで作ろうとしてるんですけど割と神ですか?
- 12 :
- どこかで404とかのドキュメントを
ブラウザの環境変数であれこれする
shスクリプト見たような気がする
- 13 :
- shbbs.cgi (1/2)
#! /bin/sh
if [ $REQUEST_METHOD = "POST" ]
then
cp log.txt dummy.txt
printf "`cat -| awk -f filt.awk`" | sed -f filt.sed >> dummy.txt
printf "<br>\n" >> dummy.txt
tail -30 dummy.txt > log.txt
fi
cat <<END_OF_HEADER
Content-type: text/html; charset=EUC-JP
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>/bin/sh BBS</title>
</head>
<body onLoad="LoadCookie()">
<script type="text/javascript"><!--
function SaveCookie(val){
document.cookie = "handle_name="+escape(val)+"; path=/;";
}
- 14 :
- sshbbs.cgi (2/3)
function LoadCookie(){
var cookies = document.cookie.split(";"), value = "";
for(var i = 0; i < cookies.length; i++){
var piece = cookies[i].split("=");
if (piece[0].replace(" ","") == "handle_name"){
if (piece[1] != null){
document.forms[0].name.value =
unescape(piece[1]);
}
break;
}
}
}
--></script>
<h1 align="center">/bin/sh BBS</h1>
<hr>
<dl>
<dd>
END_OF_HEADER
cat log.txt
- 15 :
- snbbs.cgi (3/3)
cat <<END_OF_FOOTER
</dd>
</dl>
<hr>
<a name="form">post form</a>
<form method="POST" action="shbbs.cgi#form" onSubmit="SaveCookie(this.name.value)">
name: <input name="name" size="19"> message: <input name="message" size="80"> <input type="submit" value="Write">
</form>
<div align="right"><a href="shbbs.cgi#form">Reload</a></div>
<hr>
<div align="right">/bin/sh BBS ver 1.0</div>
</body>
</html>
END_OF_FOOTER
- 16 :
- filt.awk(1/3)
BEGIN {
FS="="
RS="&"
}
{
key = "0123456789ABCDEFabcdef"
str = ""
i = 1
while(i <= length($2)){
d = substr($2, i, 1)
i++
if (d == "%"){
oct = 0
for(j = 0; j < 2; j++){
oct *= 16
d = substr($2, i, 1)
i++
for(k = 1; k < length(key); k++){
if (d == substr(key, k, 1)){
if (k > 16) k -= 6
oct += k-1
break
}
}
}
- 17 :
- filt.awk (2/3)
# if (oct > 127) oct = 32
if (oct < 32) oct = 32
col = 64
dec = ""
while(col > 0){
d = int(oct/col)
dec = (dec d)
oct -= d*col
col = int(col/8)
}
str = (str "\\" dec)
} else {
if (d == "+") d = " "
str = (str d)
}
}
$2 = str
}
- 18 :
- filt.awk (3/3)
$1 == "name" {
name = $2
}
$1 == "message" {
message = $2
}
END {
RS = "\n"
"date +'%y/%m/%d %T'" | getline time
print ("[" time ": " name "] " message)
}
- 19 :
- filt.sed (1/1)
s/&/\&/g
s/</\</g
s/>/\>/g
s/"/\"/g
- 20 :
- >>13-19
で、一行BBSできます。
log.txt,dummy.txtを作っといてね。
# 動作無保証。
- 21 :
- >>19
s/&/\&/g
s/</\</g
s/>/\>/g
s/"/\"/g
うう。
- 22 :
- うえーん!ソースコピペ荒らし反対!!!
- 23 :
- >>22
すまんかった。
- 24 :
- >>23さん
どんまい。shだけでも結構なことができるんですね。
おかわり!
- 25 :
- >>24
私の技量ではあれが限界。
awkなんて初めて使ったよ。
- 26 :
- shスクリプトで投稿文のデコードはどう行なうの?
http://www.mahoroba.ne.jp/~makkie7/CGI/cgi_008.html
ここ見ながら勉強を初めたのだが、うちのサーバーには
cgiparseというソフトが見あたらない。そのHPにはNCSA
のサーバなら附属してくるとなっているが、 当方Apache
なので。。。
どなたか御教示を頂ければ。
- 27 :
- >>26
作ろか?標準入力から入ってきたデータURLデコードするプログラム。
って言うかawkでも使えば?じゃあPerl使った方が早いなぁ・・・。
って言うかPerlの関数呼び出しとshのプロセス起動させまくり、どっちが軽いの?
- 28 :
- >>27様
おねげーしますだ。m(_ _)m
できればawkのものが勉強のためにはうれしかったりします。
- 29 :
- >>28
27じゃないけど、単に標準入力から読んでデコードして標準出力に書き出すだけならこれでいいかな。
きちんとテストしていないけど。一度全てバッファに取り込んだ方がいいかな?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[3]={0};
int c;
while((c=getchar())!=EOF){
switch(c){
case '+':
putchar(' ');
break;
case '%':
s[0]=((c=getchar())==EOF)?'\0':c;
s[1]=((c=getchar())==EOF)?'\0':c;
putchar(strtol(s,NULL,16));
break;
default:
putchar(c);
break;
}
}
return 0;
}
- 30 :
- >>29様
ありがとうございます。
これはccでコンパイルした後、どうshスクリプトに組み込めばよいのですか。
初学者なものでお手数をとらせてもうしわけございません。
- 31 :
- sh スクリプトで URL デコード。
URL エンコードされてない無関係な文字列が入ってると破綻するけど。
% cat urldec.sh
#!/bin/sh
( echo ibase=16; echo obase=8; echo "$@" | tr a-z% A-Z\\n ) |\
bc |\
while read a; do
echo -e \\0$a
done |\
tr -d \\n
% sh urldec.sh %A4%DB%A4%B2
- 32 :
- >>11
おいらLISP(clisp)でつくってるよ〜
#! /usr/bin/perl
open (MYLISP,">mylisp.lisp");
print MYLISP "S式";
close(MYLISP);
system("clisp mylisp.lisp");
こんなんだけど・・・
- 33 :
- ★男はココを見るべし★女と金とサンプルムービー★
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
- 34 :
- >>32
あんた、そっち公開しても仕方ないっしょ。
- 35 :
- そういえば、cgi じゃなくて httpd そのものが
sh で書かれてるというのがあるんだった。
http://www.ascii.co.jp/pb/book1/announce/inet256/Source/shttpd
- 36 :
- >>35
ああ、スーパサーバ使えば後は標準入出力のプログラムになるからなぁ。
- 37 :
- >>35
<H1>ただいまメンテ中</H1>
って吐くだけの同じ奴を使ってた事がある。
apache止めてる間だけとか。
- 38 :
- mod_brainfuck で…。(誰か使ってる人いない?)
- 39 :
- なつかしーな。1994年ごろは、カウンタっていったら、shとperlが半々だったきがする
- 40 :
- >>39
shスクリプトが生き残れなかったのはなんでだろう?
- 41 :
- 外部コマンドを大量に起動するためにオーバヘッドが非常に大きく遅い。
shから呼ばれる外部コマンドのパスや引数や実装がOSによって大きく異なる。
あまつさえ/bin/sh自身がOSによって互換性がない。
- 42 :
- >>41
うむ。その前提で限界に挑戦するのがおもしろいのではないのか?
- 43 :
- 毎回自分自身がどのような環境に置かれた sh なのか調査した上で動き出すようにすればよい。
- 44 :
- configureかよ!
- 45 :
- (^^)
- 46 :
- ∧_∧
( ^^ )< ぬるぽ(^^)
- 47 :
- echo "AGE"
- 48 :
- http://homepage.mac.com/ayaya16/
- 49 :
- multipart/form-data ならデコードしなくて済むのでわ,
と言ってみるテスト
- 50 :
- ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
- 51 :
- ∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
- 52 :
- >>41
> 外部コマンドを大量に起動するためにオーバヘッドが非常に大きく遅い。
> shから呼ばれる外部コマンドのパスや引数や実装がOSによって大きく異なる。
> あまつさえ/bin/sh自身がOSによって互換性がない。
上のほうでシェルスクリプトがperlより軽いとか言ってるのはウソなんですね。
- 53 :
- ほんとうに sh しか使わんのならかなり軽いよ。
ただ、ある程度以上の規模になると外部コマンドを fork せずに
スクリプトを書くことができない。だから総体として重くなる。
ある程度以上の規模のスクリプトなら、
いったん中間言語にコンパイルしてから実行する perl にはかなわんね。
- 54 :
- >いったん中間言語にコンパイルしてから実行する perl にはかなわんね。
テキスト−>解析−>実行
テキスト−>解析−>中間コード生成−>解析−>実行
Perlの方が遅くないか?JSPの初回起動みたいなもんだろ。
ループとかだと若干有利か。
- 55 :
- @system("echo <HTML>")
- 56 :
-
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
- 57 :
- ∧_∧
( ^^ )< ぬるぽ(^^)
- 58 :
- ∧_∧ ∧_∧
ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
- 59 :
- (⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
- 60 :
- 保守
- 61 :
- rrr
- 62 :
- 1994年ごろ、
カウンタつっても、Perlかshでつくったものしかなかったよ・・・なつかしや
- 63 :
- うわ、11ヶ月ぶりのレスじゃねーかw
- 64 :
- apacheでshでCGI動かす設定ってどうやるんですか?
perlとC(バイナリ)では正常に動くんですけど・・・
shだと500 internal server errorになります。
ちなみにシェルはcsh使ってます
- 65 :
- CGIなんだから、一行目にシェバングパスを書かないとだめだぞと。
- 66 :
- >>64
hello.cgi
-----------------
#!/bin/sh
echo "Content-type: text/html\n\n";
echo "Hello";
- 67 :
- ほす
- 68 :
- ぺす
- 69 :
- 昔アセンブラでCGI作って動かしてたな(´・ω・`)
- 70 :
- >>26
つNKF
- 71 :
- >>64
.shで動かしたいならスクリプトがあるディレクトリに.htaccessを作り、
AddType application/x-httpd-cgi .sh
と書けばよい
- 72 :11/01/26
- シェルスクリプトでてきとうにURLでこーど
#!/bin/bash
#環境変数[QUERY_STRING]を[&]を空白に変換しパース
_QRYVAL=`echo "$QUERY_STRING" | tr '&' '\t'`
#引数解析
for v in $_QRYVAL
do
#[=]を空白に変換し配列化
v=(`echo "$v" | tr '=' '\t'`)
#formの[name]に[value]を格納(URLデコード)
eval "${v[0]}"="`echo ${v[1]} | tr % = | nkf -emQZ1`"
done
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
【待望】PerlユーザのためのPHP入門
PostgreSQL 2テーブル目
WEBプログラマ25歳定年説
縦書き掲示板