新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mxa.meshnet.or.jp>
Subject: Re: CGIのアップロード
Date: 1996/11/17 23:52:57
Reference: mesh.program/00134

11月17日に、NKさんは書きました。

>また、当初アスキーモードでアップして公開したのですが、これをダウン
>してまたアップするとFTP で「アスキーモードで転送・・・」という警告
>が表示されることがわかりました。このため今あるものは、バイナリモー
>ドでアップしてあります。これをアスキーモードでダウンしてアスキーモ
>ードでアップすると警告は表示されません。
>ちなみに、警告が表示された場合でもうちのページでは正常に動作しました。
>
>結局、疑問点は
> ・人に公開するCGIは何モードでアップすればよいのか?
> ・同じmeshでもサーバによって設定が異なる場合があるのか?
>という2点です。FTPソフトはFetch3.0.1です。
>
えーと、まず基本的な所を少し。

NKさんはご存じでしょうけど、改行記号はUnix、Mac、Windows(DOS)の三者でそれぞれ
異なるものを使っています。UnixはLFだけ、MacはCRだけ、WindowsはCRLFのペアです。

ここで、FTPやHTTPでのテキストモード転送と言うのは、この改行記号の変換を自動で行なって
くれるものです。たとえば、Unixのサーヴァ上にあるLFで終端される文字列をMacに持って
くると、自動的にCR終端にされるわけです。これにより、それぞれのマシン上でのテキスト
エディタや行単位の動作をするプログラムで問題なく扱えるわけです。

バイナリモードの転送というのはこれらの処理をいっさい行なわない、文字通りバイナリで
扱う、何の変更も行なわない転送モードです。

さて、NKさんはスクリプトをバイナリモードでアップロードしたそうですので、スクリプトは
NKさんのマシン上での改行コード、つまりMacのCR改行でUnixサーヴァであるMeshの上に
置かれているわけです。

これをダウンロードするとどうなるでしょうか?MeshサーヴァはUnixマシンですから、改行
記号はLFです。ですからLFが現われるまでを1行としますが、残念ながらスクリプトはCR改行
ですからLFは現われません。つまりスクリプトすべてが1行として扱われることになります。

ダウンロードした人がたまたまMacを使っていれば良いのですが、そうでない場合には、たった
1行のスクリプト、それも最初に"#"(コメント記号)がありますから、中身のないコメント
だけのスクリプトとなって「CGI特有のヘッダ出力が無い」と言うサーヴァエラーになるでしょう。

# Macユーザの方もエラーになっているなら、他にも問題があるかもしれません。(^^;;

と言うことで、基本的にスクリプトはテキストモードでアップロードするのが正しいです。
また、スクリプトをダウンロードした方が自分のサーヴァにアップロードする時も、テキスト
モードで行なうのが正しいです。サーヴァからのダウンロードは *.pl の場合、黙っていても
テキストモード(text/plain)になるので心配無いです。

# などと、偉そうなことを言ってますが、自己解凍CGIをダウンロードしてもらう時、最初
# WindowsではTEXTモードしか選べないのに気が付かないで、「常にバイナリモード転送
# して下さい」などと無理を言ってた過去を持つ。(^^;

## UnixのNetscapeは text/plain でも転送モードを選べるので何処でもそうなのかと
## 思っていた。(^^;;