68user's page 掲示板

Prev< No. 13〜16> Next  [最新発言に戻る] [過去ログ一覧]
No. 13 # ROL [E-mail] 1998/10/28 (水) 00:24
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師匠、ここまでの解説を御教授くださいませ。

No. 14 # 68user 1998/10/28 (水) 03:04
>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日分残るって事でいいんでしょうか。

あい。変なプログラムですね(笑)

No. 15 # 68user 1998/10/28 (水) 03:33
まぁ簡単なプログラムだから、原理を理解したら
自分でスクラッチから書き起こすのもいいと思います。要は

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を使って
現在置いてある全てのアーカイブをリアルタイムで
リストアップしてもいいですし。

No. 16 # ROL [E-mail] 1998/10/29 (木) 00:40
昨日のおさらい
(申し訳ないですが、しばらくお付き合い頂けると助かります)

-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の仕様は今後変わる予定ってのはあるんでしょうか?

あぁ、やっぱりラクダ本買わないとだめだな…

Prev< No. 13〜16> Next  [最新発言に戻る] [過去ログ一覧]