|
こんばんわ。賑わってますね^^ もう既に付いていけないくらいの話題になってます(汗) そうですか、6気筒1万ccのマシンなんですか。 そんな良いマシン、前の仕事でも使った事なかったなあ。 error.cgi、参考にさせてもらいます。 でも、いつ反映できるかは謎ですが(笑) |
|
RefererなのかReferrerなのか、いづれ決着をつけましょう・・・・・・・・・ って、ほさいぬさんが言ってました。 |
|
お招きにあずかり、参上致し…あ、あれ?誰もよんでないって? こりゃまた、失礼しました〜〜、って年代モノのギャグはどっかにやっといて、と。 取り敢えず、某所でここのCGIが必要になりそうなんで頂いていきます(笑) 問題が発生すればレポート出しますんで、その時には宜しくお願いしますね。 まぁ、仕事もあるんで、すぐに設置できる状態ではなさそうなんだけど… |
|
g2を見てみる…いきなり一行目でつまずく(笑) >#!/usr/local/bin/perl -w の-wってなんでせう?何かのオプションかなぁ…まぁいいや まさか1行目からつまずくとは思わんかったけど(笑) 次 >push(@INC,"/home/usr4/a5/i/a5i050/public_html/cgi-bin/"); >push(@INC,"/home/95s/j5306050/bbs"); またつまずく(爆) push?perlってpush使えるのか? でもpop無い様な…、いいやこれも、次いこう次。 >$nocgi = 1; ん〜、なんかのフラグにしてんのかな、だとしたらなんなのでせうか? 例のごとく次へ >require 'timelocal.pl'; >require 'environment.pl'; ライブラリか、timelocal.plの方はどっかのサーバーにあるだろうから適当にDLしてくればいいか。 ほんとにいいんでしょうか>お師さん 問題はenvironment.plのほう。 同じようにDLしてみる…やばい、これは結構書き直しがいりそう… 時間もかかりそうなので、こいつに関してはまた後日。 >$proxy = 'http://www.cs.gunma-u.ac.jp:8080/'; こいつはプロキシのアドレスですな。 まぁ適当なプロキシサーバー見つけてきて代入すればいいですよね。 >$base_dir = "$home/test00"; 以下3行 コメントがあるので分かりやすい… が、$homeが問題。 environment.plに記述があるので、そこから書き換えないとだめですねぇ >$erase_span = 2; 変数の名前から想像するに…過去ログを残す日にちかな? 2って事は3日分残るって事でいいんでしょうか。 ってことで、g2理解するのにはまだまだ時間がかかりそうです。 68user師匠、ここまでの解説を御教授くださいませ。 |
|
>cal殿 ログは保護しました >肉殿 JavaScriptって全てreferrerなんですか? うーん、納得いかん。 >ROL殿 -wはperlにwarningを吐かせるオプションですな。 requireってのは、ファイルをインクルードする命令です。 だから、「require 'environment.pl';」の変わりに、 environment.plの内容をそのまま貼っておいてもいいです。 で、requireする場合、どのディレクトリからファイルを 探すかを決めるために、perlは@INCを参照するわけです。 ちなみに localtime(&timelocal(0,0,0,$day,$mon,$year)-60*60*24); で&timelocalを使うためだけにrequireしてます。 # timelocalはlocaltimeの逆変換をする関数です。 $nocgi は environment.pl でチェックしてる変数です。 うちのCGIはnobody権限でないと動かないようにしてる んですが、g2はCGIじゃないので自分の権限で動かす必要が あります。ですからそのチェックをすり抜けるための 変数です。とっぱらってください。 environment.plで使ってるのは、$nkf、$home、$httpdownだけ だと思うんで、上のところ全部削除して、 $home = "/home/rol"; $nkf = "/usr/local/bin/nkf"; $httpdown = "/home/rol/bin/httpdown"; とでも書いておけばいいでしょう。 timelocal.plはperlについてくると思うんですが、 なければあげますので言ってください。 あと if ( -f "$log_dir/$date.tgz" ){ system("mkdir -p $main_dir/"); print "extract $log_dir/$date.tgz\n"; system("$tar zxf $log_dir/$date.tgz -C $main_dir"); } これは、既にその日作ったアーカイブがあれば展開してます。 デバッグ時に一度落としたファイルを何度も落とすのは 時間の無駄ですから。 > 変数の名前から想像するに…過去ログを残す日にちかな? そのとおりです。 > 2って事は3日分残るって事でいいんでしょうか。 あい。変なプログラムですね(笑) |
|
まぁ簡単なプログラムだから、原理を理解したら 自分でスクラッチから書き起こすのもいいと思います。要は 1. 1_index.shtmlをGET 2. 1_index.shtmlからリンクされている*_ALL.shtmlをGET 3. 次のvolをGET(GETできなかったらおしまい) 4. tar zxvf 1998-xx-xx.tgz *.shtml(アーカイブを作成) 5. その日のリンクを作成 してるだけです。例えば5なんかは、SSIを使って 現在置いてある全てのアーカイブをリアルタイムで リストアップしてもいいですし。 |
|
昨日のおさらい (申し訳ないですが、しばらくお付き合い頂けると助かります) -wオプション なるほど。もし、このオプションをとった場合、どういう不都合が考えられるのでしょう? まぁこのスクリプトもある程度理解できるぐらいの知識はあるつもりなんですが Perlの仕様じたいは詳しくないので教えてください。 push なるほど。requireでインクルードしてくるファイルが2つあるのでpushも二つある訳ですな。 では、前のpushと後のpushとが、それぞれどちらのrequireに対応するんでしょうか? やっぱり先のpushがenvironment.pl、後のpushがtimelocal.plですか? timelocal.pl お手数をおかけして申し訳ないですか、下さい(笑) environment.pl ん〜、3つの代数ぐらいなら確かにスクリプト本体に組み込んじゃった方が早いですね。 そこは適当に書き換えときます…が、ここで新たな問題が発生。 $homeはディレクトリなんで分かりやすいんですけど、 $nkfこれが問題。これはファイルだと言うとこまでは理解できるんですが(サブルーチン内でオープンしてますから) このファイルってなんなんでしょう? ただのテンポラリとして使用しているんでしょうか? 後で出てくるサブルーチンをみても理解できないです(T_T) $httpdown…そもそもHTTPDOWNが何をするアプリケーションなのかが理解できてません(笑) if ( -f "$log_dir/$date.tgz" ){ system("mkdir -p $main_dir/"); print "extract $log_dir/$date.tgz\n"; system("$tar zxf $log_dir/$date.tgz -C $main_dir"); } つまり、このスクリプトでは、ダウンロードしたファイルを圧縮している訳ですよね。 ちゅうことはtarが必要な訳なんですが、UNIX自身をほとんど触った事の無い私には 正直言って手に余る部分です。 ってことで、この部分は全面的に改良して、非圧縮でやるとこを目標としときます。 で、本日のお勉強 get_today_time ここでの問題点は二つ。 1つはライブラリですが、これはライブラリがあれば解決できるので、正確には問題にならない。 2つめ…2000年問題!!! これ…独力でナントでもなるわ(笑) localtime()でとってきた$yearが98以下の時には $year+=1900; ではなく $year+=2000; にしちゃえば、百年間は大丈夫だからねぇ。 もっとも根本的な解決にはなってないが、それはシステムが対応せんとどうしようもないもんね。 このあたりUNIXの仕様は今後変わる予定ってのはあるんでしょうか? あぁ、やっぱりラクダ本買わないとだめだな… |
|
訂正 ocaltime()でとってきた$yearが98以下の時には>ocaltime()でとってきた$yearが98未満の時には 謹んで訂正致します。m(__)m |
|
> ってことで、この部分は全面的に改良して、非圧縮でやるとこを > 目標としときます。 ん〜、圧縮しないと1MB近くになりますよ。 > なるほど。requireでインクルードしてくるファイルが2つあるので > pushも二つある訳ですな。 ちゃいます。timelocalはシステム標準のディレクトリ (/usr/local/lib/perl5/とか/usr/share/perl/など)に あるので、そのままrequireするだけでOKです。 pushが2つあるのは、このCGIをwww.cs.gunma-u.ac.jpと www.cc.gunma-u.ac.jpのどちらでも動作させるためのものです。 # まぁあれは僕の環境に合わせるための記述なので、 # 深く考えなくてもいいです。 > timelocal.pl というわけで、サーバがUNIXならまずそこに置いてあると 思うのですが、一応 http://X68000.startshop.co.jp/~68user/tmp/timelocal.pl に置いておきます。 > nkfこれが問題。 nkfはコマンドです。まず http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#nkf を読んで、nkfの機能を知ってください。 で、DOSで A:\>type hogehoge | more などとパイプを使ったことあります? これは more < hogehogeと等価ですよね(多分…DOSは忘れた)。 それと同じで、 % nkf -e < hogehoge は % cat hogehoge | nkf -e (UNIXのcat=DOSのtype) と同じです。 つまり、落としたファイルはSJISなので、nkfを使って EUCに変換しているわけです。 # ところで、open(IN,"hoge|")とかopen(OUT,"|hoge") # という意味はわかりますか? httpdownについてはまた後で書きます。とりあえず、 UNIXで実際にhttpdownを動かしてみるのが一番わかりやすい ことは確かです。 それからtarですけど、 tar zxf hoge.tgz = lha e hoge.lzh tar zcf hoge.tgz *.shtml = lha a hoge.lzh という説明ではダメでしょうか。一応 http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#tar も読んでください。 > 2つめ…2000年問題!!! ふふ…、いまだに2000年問題が残ってたら、強者揃いの UNIXハッカー連中がよってたかって直しにかかるでしょう。 localtimeが返す年は西暦-1900です。2000年なら100を返します。 なんで-1900かっていうと、やはり昔は2000年問題が残っていたので、 それとの整合性を取るためでしょうね。 あと一部のUNIXには2038年問題があります。1970年1月1日からの 経過秒数が、2038年あたりでlongでは表現できなくなるので。 > あぁ、やっぱりラクダ本買わないとだめだな… 別に質問するなって言ってるわけじゃないですけど (僕がお願いしたんだし)、-wなどマニュアルを見れば 載っていることは手元のラクダ本を調べた方が早いですよ。 僕に聞くと1日かかることも、ラクダ本があれば数分で 片付きます。 あと、過去ログ閲覧用スクリプトも設置する必要がありますが、 そこには s|$&|<a href="$toppage_url">$link_message</a>|; s|\Q$&\E|$tmp|; if ( m|<a href=.*?noteky_base\.cgi.*?>(.*?)</a>| ){ などが出て来ます。 $&、\Q〜\E、.*?など、ラクダ本がないとかなり困ることに なると思いますので、購入されることをお勧めします。 一応perl5のマニュアルは http://www.bekkoame.or.jp/~syunji/perl/man/index.html にありますが、最初は本で読む方がいいんじゃないかと 思います。 |