68user's page 掲示板

Prev< No. 3700〜3708> Next  [最新発言に戻る] [過去ログ一覧]
No. 3700 # sagara [E-mail] 2004/04/28 (水) 19:15:37
ファイルをダウンロードするスクリプトを作成していますが、
ファイルサイズが大きいとファイル内容は一部しかダウンロードできません。
sysreadの戻り値$Ret_Lenは、正しい値が返ってきます。
最後のprint文で、全てを出力していません。あるいは、$INBUFに全てが
格納されてないかです。
全ての内容をダウンロードするには、どうすべきなのでしょうか?

    $size = -s $dl_file;
    open(INF, $dl_file) or &CgiError( "Error: Unable to open file $dl_file: $!\n" );
    binmode(INF);
    $Ret_Len = sysread(INF, $INBUF, $size);
    if (defined $Ret_Len) { #エラーではない
        if ($Ret_Len >0) { #読み取りの成功
            ;
        } else { #EOF
            close(INF);
        }
    } elsif ($! == EAGAIN) { #ブロックエラー
        $Ret_Len = sysread(INF, $INBUF, $size);
    } else {
        die "sysread() error: $!";
    }

    $NowMime = substr( $f_name, rindex($f_name, ".")+1, length($f_name) );
    $NowMime =~ tr/a-z/A-Z/;
    $RetMime = "";
# 2001.12.19 added by ishikawa ->
    #$mimeMach = 'dummy';
# 2001.12.19 added end ishikawa <-
    if( $NowMime ne "" ){
        if( open(CB, "./lib/mime.types") ){
            @mimein = <CB>;
            close( CB );
            foreach( @mimein ){
    if(/^[^#\n\r]/){
     s/[\t]+/\t/;
     ($MimeHead,$MimeBody) = split(/\t/);
# 2001.12.19 added by ishikawa ->
     if( defined $MimeBody ){
# 2001.12.19 added end ishikawa <-
     foreach $mimeMach ( split( /\s/, $MimeBody ) ){
     $mimeMach =~ s/\s//g;
     $mimeMach =~ tr/a-z/A-Z/;
     if( $mimeMach eq $NowMime ){
     $RetMime = $MimeHead;
     last;
     }
     }
# 2001.12.19 added by ishikawa ->
     }
# 2001.12.19 added end ishikawa <-
     if( $RetMime ne "" ){ last; }
    }
            }
        }
    }

    if( $RetMime eq "" ){
        print "Content-Type: application/octet-stream\n";
        print "Content-Disposition: inline; filename=\"$f_name\"\n\n";
    }
    else{
        print "Content-Type: $RetMime\n";
        print "Content-Disposition: inline; filename=\"$f_name\"\n\n";
    }

    binmode(STDOUT);
    print $INBUF;

No. 3701 # 68user 2004/04/28 (水) 21:50:48
>>3700 sagara
- 「ファイルサイズが大きい」とは具体的に何バイトですか?
- あるバイト数以上のファイルの場合、常にダウンロードできないのですか?
- 大きいファイルを処理するのに何秒かかりますか?
- length($INBUF) の値は?
- $INBUF の内容をファイルに出力すると、正常に出力できますか?
- 「sysreadの戻り値は正しい」というのは「正常にダウンロード
    できなかった場合でも、sysread の戻り値は正しい」ということ
    ですか?
- sysread ではなく read を使うとどうなりますか?
- OS 名・OS のバージョン・perl のバージョンは何ですか?

あと、コメント部分や関係ない箇所は極力削ってから投稿しましょう。
仕事のソースであれば特に。

No. 3702 # うほほ 2004/04/29 (木) 17:10:34
>68USER様
早々のお返事をありがとうございました。
やってみたら、ばっちりでした〜!
本当にありがとうございました♪

No. 3703 # lock 2004/05/04 (火) 09:58:30
はじめまして。よろしくお願いします。

環境:NetBSD1.5.2、Apache2.0.49

以下に示す接続が、4日くらいたっても消えません。
これは、クライアントがhttpで何かをダウンロード中の状態の1つということでしょうか?
ずっとこの状態のままなのはどういう原因が考えられますでしょうか?

Apacheのログには、このクライアントからのアクセスログは存在しませんでした。
FIN_WAIT_2の状態が終了した後で書き込まれるのでしょうか?


%netstat -an (一部抜粋)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 15964 210.*.*.*.80 133.*.*.*.15241 FIN_WAIT_1
tcp 0 16460 210.*.*.*.80 133.*.*.*.6322 FIN_WAIT_1
tcp 0 16500 210.*.*.*.80 133.*.*.*.19339 FIN_WAIT_1

No. 3704 # 68user 2004/05/04 (火) 19:45:56
>>3703 lock
サーバ側から close すると (正確にはアクティブクローズ
すると) FIN_WAIT_1 になります。普通はこの後にクライアント
から ACK・FIN が帰ってきて FIN_WAIT_2 に遷移しますが、
この辺がうまくいっていないものだと思われます。

> ずっとこの状態のままなのはどういう原因が考えられますでしょうか?
わかりません。普通は FIN_WAIT_1 のままにならないように
タイマか何かがあると思いますが、FIN_WAIT_1 タイマって
存在するのかな? (FIN_WAIT_2 タイマはあるけど)

> FIN_WAIT_2の状態が終了した後で書き込まれるのでしょうか?
これまたわかりません。apache のソースを読みましたが、どこで
ログを吐いてるのかすらわかりませんでした。

とまぁ何の役にも立たない回答になってしまいましたが、
数日様子を見てはいかがでしょうかね。

No. 3705 # hash 2004/05/04 (火) 23:12:07
数日前、FreeBSD 5.2Rをインストールしたのですが、起動時(ログイン前)に

Configuring syscons: keymap blanktime

と表示され、長時間とまってしまって困っています。
その後ログインプロンプトが表示され、ログイン可能ですし、
その他の操作に問題も無い感じなのですが、毎度の事なので釈然としません。

解決方法は無いものでしょうか?それともこういうものなんのでしょうか?
よろしくお願いいたします。

No. 3706 # 68user 2004/05/04 (火) 23:28:38
>>3705 hash
> Configuring syscons: keymap blanktime
の後の sendmail 起動時に固まっているものと思われます。

内容は若干グダグダですが、こちらをどうぞ。
    http://home.jp.freebsd.org/cgi-bin/thread?mesid=%3c200308030422%2eAA02439%40nt%2em8%2edion%2ene%2ejp%3e

てゆーかうちのマシンも sendmail 起動時に固まりますが、
めんどくさいので止まったら Ctrl-C を押してます。

No. 3707 # hash 2004/05/05 (水) 02:07:03
>> 3706
早速のお返事ありがとうございます。
ご指摘頂いた通り、原因はメッセージの後のsendmailの起動でした。
> Configuring syscons: keymap blanktime
のメッセージから検索しても、解決法が見つからないのはあたりまえでしたね。

ご紹介いただいたウェブサイトに目を通すのに時間がかってしまいましたが、
解決することができました。

私の場合はDNSサーバの指定部分で、ADSLモデムの提供しているDNSで解決しようとしていたのですが、
モデムのDNSサービスがIPv6に対応していない為、名前解決できずTime outを待っていたようです。
DNSサーバの指定をプロバイダーのアドレスにしたら解決しました。

起動する度に気になっていたので、すっきりしました。
どうも、ありがとうございます。

No. 3708 # Sjr 2004/05/05 (水) 20:19:41
DESについて質問させて下さい。
OpensslコマンドでDESを使っているのですが、間違った鍵で復号しようとすると
bad decryptというエラーがでます。パリティチェックはOKとします。
これはDESの仕様上、エラーが検出できるということなのでしょうか?
DESというと単にビット単位の置換だと思っているので、エラーが検出できるのが
ちょっと不思議です。
TripleDESの中ででも、いきなり関係無い鍵で復号したりしてますから、さらに
不思議です。

なにか根本的に理解が違っている気もするので、宜しければご教授ください。

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