CGIからファイルを作成してみる
取り合えずCGIで作るものを決めたので目標に向かって突き進むのみ。
最初に必要なのはファイルをCGIから作れるかということ。
sys-systemからファイルを作ろうとしたらファイルが作成できないのでメモ。
ちなみにサーバはApache2。
(use www.cgi) (use text.html-lite) (cgi-main (lambda (parms) (list (cgi-header) (html-doctype) (html:html (html:body (if (= (sys-system "touch hoge") 0) (html:p "touch hoge") (html:p "Hello World")))))))
"Hello World"が表示される。ということはtouchできていない。
色々考えると権限の問題か?と思いついたので別のスクリプトを試してみる。
(use www.cgi) (use text.html-lite) (cgi-main (lambda (parms) (list (cgi-header) (html-doctype) (html:html (html:body (if (= (sys-system "pwd > /tmp/hoge") 0) (html:p "pwd hoge") (html:p "Hello World")))))))
"pwd hoge"が表示されたのでどうやらCGIからファイルの作成は可能らしい。
$ cat /tmp/hoge /usr/lib/cgi-bin/
どうやら実行ディレクトリはCGIのスクリプトファイルと同じみたい。
lsして見てみるとやっぱり権限で引っかかっている可能性大。
$ ls -l /usr/lib/|grep cgi-bin drwxr-xr-x 2 root root 48 2009-04-05 22:44 cgi-bin
試しにApache2でアクセスできるディレクトリを作ってみる。
# mkdir /var/www-tmp/ # chown www-data /var/www-tmp/
以下を追加、Apache2を再起動。
/etc/apache2/sites-enabled/000-default
Alias /cache/ "/var/www-cache/"Options Indexes -MultiViews AllowOverride None Order allow,deny Allow from all
このスクリプトで問題なくファイルが作成されたので問題解決。
(use www.cgi) (use text.html-lite) (cgi-main (lambda (parms) (list (cgi-header) (html-doctype) (html:html (html:body (if (= (sys-system "touch /var/www-img/hoge") 0) (html:p "touch /var/www-img/hoge") (html:p "Hello World")))))))
今回はあまり意味も分からずに設定したので(ローカルなのでまだ問題無し)、Apache2の設定も勉強が必要だな。