AN HTTPD ゲストブック/コメント集(2000年2月15日04:07)


メビウス no@dress.now 2000/02/17 22:44

>ぴゅあさん
>これはフォームから受け取ったCGIの処理次第。

実はそのCGIによる改行処理の為に正常な動作か否かを知りたかったのです・・・

>中田昭雄さん
>UNIXのファイル入出力では基本的にはテキストモードはありませんので、
>デフォルトがバイナリモードと考えていいと思います。

ありがとうございました。すっきりしました。


中田昭雄 nakata@st.rim.or.jp 2000/02/16 21:19

メビウスさん、
UNIXのファイル入出力では基本的にはテキストモードはありませんので、デフォルトがバイナリモードと考えていいと思います。
UNIX で binmode を使っても何もしないので、 Windows と UNIX とで共用するスクリプトの場合は binmode を入れたままでも大丈夫のはずです。
実際、multipart/form-data を読み込める cgi-lib.pl などでは binmode が使われていて、そこのコメントには、
# we need these for DOS-based systems
# and they shouldn't hurt anything else
とあります。


ぴゅあ pure@GalaxyCorp.com 2000/02/16 02:37

>メビウスさん
 参考になるものかどうなのか。
 以前ちょっとした勘違いから中田さんが突っ込んでくれて判ったことです。
 どの時点で見て{$0D,$0D,$0A}であったのかというのはAN HTTP Server(Win環境)だったか
らということで間違いないでしょう。
 「UNIXに設置し・・・」に付いてはクライアント(ブラウザ)がWin環境で動いているから{$0D,$0A}
の形で送られてくるものと思います。これがUNIX上のブラウザだったら{$0A}のみなのでしょう
(たぶん)。
 因みにこれに対する出力をブラウザから取り出すとテキスト変換されるので{$0D,$0D,$0A}と
なり得ます。これはフォームから受け取ったCGIの処理次第。
 CGI処理次第というのには漢字処理も。。。。


メビウス no@ddress.now 2000/02/15 23:06

>テキストモードでの出力は 0A -> 0D 0A の変換をおこないますから、
>もとが 0D 0A だったら 0D 0D 0A になってしまいます。

なるほど、
(Perlの)binmodeファンクションを使用したら 0D 0A 改行で出力されました。
勉強になりました。

同じ、CGIスクリプトをUNIXに設置し、WINDOWSからデータを送った際に
出力がbinmodeを使わなくとも 0D 0A 改行になるのは、
UNIX環境ではデフォルトでバイナリモードで出力されるからと考えれば良いでしょうか?


中田昭雄 nakata@st.rim.or.jp 2000/02/15 21:42

メビウスさん、
リクエストのヘッダの改行が 0D 0D 0A になっているということでしょうか?
リクエストの話ならブラウザの責任ですが。。。

CGIが読み込んだデータを出力したときの改行が 0D 0D 0A になっているということであれば、テキストモードで出力しているからでしょう。テキストモードでの出力は 0A -> 0D 0A の変換をおこないますから、もとが 0D 0A だったら 0D 0D 0A になってしまいます。
Perl なら binmode(STDOUT) を使って バイナリモードで出力してください。
(multipart/form-data の読み込みはたぶんバイナリモードで読み込んでいるでしょうから)


メビウス no@ddress.now 2000/02/15 04:07

いつもお世話になっております。

質問ですが
フォームでENCTYPE="multipart/form-data"として
データを送った際に改行が 0D 0D 0A (16進です)となっているのですが
これは正常な動作なのでしょうか?

使わせて頂いているバージョンは1.14なので、今から最新版に替えて
再度確認してみます。