Shammer's Philosophy

My private adversaria

CLISP で CGI

Script としての clisp ファイル

CLISP だと、ファイルの冒頭に #!/usr/bin/clisp とか(実際の CLISP のPATH)やって実行権限付与すれば、そのままスクリプトとして実行できる。ということは・・・CGI 書けるのでは?と思ってやってみた。

CGI サンプルファイル

こんな感じ。動作すれば、ブラウザには Hello! とだけ表示されるはず。

#!/usr/bin/clisp
(format t "Content-Type:text/plain~%~%")
(format t "Hello!")

Mac OS X での動作

Mac 同梱の Apache を動作させた場合、CGI のファイルは /Library/WebServer/CGI-Executables/ に置くことになっている。上記のファイルを sample.l として保存して実行権限を付与する。この状態で http://localhost/cgi-bin/sample.cgi とやることで実行できた。

Debian での動作

DebianApache では、CGI のファイルは /usr/lib/cgi-bin/ に置くことになっている。デフォルトの拡張子は .cgi なので、これも /usr/lib/cgi-bin/sample.cgi としてブラウザで http://$LINUX_HOST_NAME/cgi-bin/sample.cgi へアクセス。問題なく表示される。もちろん、apache の設定ファイルで AddHandler cgi-script *** とやれば、Lisp とわかる拡張子も使用できる。.lsp とか .l だろうか。.l の場合はこんな感じの設定になるはず。

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
        <Directory "/usr/lib/cgi-bin"> 
                AllowOverride None 
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
                AddHandler cgi-script .l 
                Order allow,deny 
                Allow from all 
        </Directory> 

どうやって POST データを扱うのか?

以下のライブラリを見つけた。

 CLiki: lisp-cgi-utils

本家は以下のようだ。

 lisp-cgi-utils

ダウンロードしてみたが、http.lisp というのと html.lisp というのをロードすればいいようだ。examples にもサンプルがあるようなので、今度参考にやってみようと思う。