shスクリプトでcgi
Perl vs. PHP vs. Rubyと言われているこの時代に shスクリプトでcgiを書いている奴っていますか。 周りからは生きた化石と言われながら、頑固一徹 shスクリプトのcgiの可能性にかけている。 そんなcgi職人、集まれ! Cでcgiを書いてますが何か? ↓C++で書いてるヤシ 低パワーマシンで perl や python では重すぎる CGI でシェルスクリプト使ったりします。 #!/bin/sh echo "Coutent-type:text/html;charse:Shift_JIS\r\n\r\n逝ってよし" かけないこともないが perlで重くてシェルスクリプトで軽いってことは そんなにないだろう? もしそうなのならマシンを見直す必要があると思うが・・・ WinのバッチファイルでCGI組んでるやつの方が まだネタになるぞ > WinのバッチファイルでCGI すごい穴になりそうだな shスリプトでここまでできたという事例が聞ければうれしっす。 /bin/sh >>7 つぅか標準入力を扱えない時点でCGI失格だと思われ。 C++ with MFC で家庭内LAN用のCGI作ろうとしてますが、何か? # CStringマンセー 機会があればschemeで作ろうとしてるんですけど割と神ですか? どこかで404とかのドキュメントを ブラウザの環境変数であれこれする shスクリプト見たような気がする 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=/;"; } 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 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 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 } } } 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 } 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) } filt.sed (1/1) s/&/\&/g s/</\</g s/>/\>/g s/"/\"/g >>13-19 で、一行BBSできます。 log.txt,dummy.txtを作っといてね。 # 動作無保証。 >>19 s/&/\&/g s/</\</g s/>/\>/g s/"/\"/g うう。 >>23 さん どんまい。shだけでも結構なことができるんですね。 おかわり! >>24 私の技量ではあれが限界。 awkなんて初めて使ったよ。 read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる