ローカルで(localhost用)立ててみた。よちよち歩きで設定中。
もちろん日本語ファイル名なんぞは使わないのがベストなのだが、そうは言ってられない事態もある。何かしらのworkaroundを考えなくてはならない。サーバ側に日本語ファイル名を置いて、そのURLを指定するなんてのは無理みたい(IISならできる?)。そこで、octet-streamを用いてダウンロードさせるのだそうだが、結局その辺の文字コード事情もクライアントによってマチマチなようである。
メールの話だが、総論みたいなのが。結論:日本語ファイル名なんか使うな
cgiの実行にあたって、権限がapacheのままだと不都合なことが多く、一般ユーザーの権限で実行させたい事がよくある。これを融通してくれるのがsuEXEC。使用のためにはバーチャルホストかUserDirを使わなくてはいけないが、後者を用いることにした。
UserDir public_html
とし、/home、/home/(username)、/home/(username)/public_html のパーミッションを各々755にしておく(ここで2日潰した!しかも、これをしておかなかったのでapacheはホームディレクトリ以下の共有ライブラリも見ることができずに途方にくれていた)。apacheを再起動すると、確かに
http://foo.bar.com/~username/file.html
が
/home/username/public_html/file.html
を参照していた。この時public_html以下のcgiは、確かに対応するユーザーのパーミッションで実行されているようであった。
#!/usr/bin/perl print "Content-type: text/html\n\n"; print `whoami`;
EBライブラリという、辞書引き関連のライブラリがある。これを利用するクライアントは多数あるが、cgiで動かせるものもあるのでチャレンジしてみた。
UNIXで電子辞書をしゃぶりつくそうの記事の通りにやれば(apacheの設定で悶絶したが)あっさりできた。ただ、EBライブラリをちょっと変わった場所に作っていたので、RubyEBのビルドでMakefileを作る際に
ruby extconf.rb --with-opt-dir=/path/to/usr
として参照先を指定してやらないとビルドがうまくいかなかった。(参考:mkmf.rb)さらに、mkmf.rb の生成?するコンパイラ(gcc)のフラグに、現在使用してるgccで解釈できないmtuneが混じっていたので、(私の環境では)/usr/lib/ruby/1.8/i386-linux-gnu にあったrbconfig.rbを修正する必要もあった。
#!/usr/bin/ruby require "eb" b=EB::Book.new b.bind("/path/to/jisho") b.subbook=0 b.exactsearch( "koumoku" ) do |word,desc| print "[",word,"]\n" print "\n",desc,"\n" end
apacheとは全く関係ないが、関連するのでここに書く。AXIS205というネットワークカメラからHTTP経由で画像を取り込むことができるので、それを利用してクライアントを作った際のメモは以下。