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の設定も勉強が必要だな。