- ベストアンサー
強制的にASCIIファイルがバイナリファイルになってしまうのでしょうか
- FTPソフトで送信する.cgiファイルが、サーバーに上がるとバイナリファイルに変換されてしまうのはなぜでしょうか?
- サーバー上のファイルがバイナリファイルかアスキーファイルかを確認する方法はありますか?
- 絶対に間違いなく.cgiファイルをアスキーファイルとして転送する方法はありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
もしかすると改行コードが正しく変換されていないのかもしれません。 そもそもFTPで転送を行う場合、元の内容のままで送信すればいいだけなら常にバイナリモードで転送すればOKです。 ではなぜテキストモードというものがあるのかというと、いろいろな環境でテキストファイルの改行コードが違うので、これを変換しないと文字化けが起きたりするからです。 ちなみに改行コードの例を挙げると、 Windows:CR+LF Mac:CR UNIX:LF ということなので、Windowsで作ったcgiをUNIXのサーバに転送するときは改行コードをLFに変換する必要があり、これがテキストモードの存在する理由です。 今回の問題は、普通なら自動で変換されるはずが、何かの理由で正しく変換されていないのではないかと思われます。 一度テキストモードで転送したものをバイナリモード自分の側に転送しなおして開いてみると、相手側で改行コードがどう変換されたかを確認できます。 この結果によっては、改行コードを変換した状態でバイナリ転送する必要があるかもしれません。
その他の回答 (2)
- sknbsknb2
- ベストアンサー率38% (1158/3035)
ANo.2です。 ANo.2の補足についてお答えします。 まずはファイルを転送したときに内容がどうなっているのかを調べるのが先決です。 (a)ファイルをテキストモードでサーバに転送する。 (b)転送したファイルをバイナリモードでサーバから自分のPCに転送する。 (c)改行コードを確認できるエディタでファイルの改行コードを調べる。 (d)サーバのサポートに、テキストファイルの改行コードを確認する。 (e)(c)と(d)が一致しないなら、cgiファイルの改行コードを(d)にあわせて変更した後 バイナリモードで転送することで解決。 (f)(c)と(d)が一致しているなら改行コードの問題ではないので、転送前と転送後で ファイル内容に変わっているところがないかどうか確認する。 ちなみに テキストファイル->アスキーコードと改行コードのみが含まれるファイル バイナリファイル->上記以外のコードが含まれるファイル なので、UNIXから見るとWindowsのテキストファイルはバイナリファイルです。 そして今回の場合、転送先の環境に従って改行コードを自動変換するのはホームページビルダーですから、ここがうまくいってなければサーバ側から見るとバイナリファイルが送られてきたとしか見えません。
お礼
ありがとうございました。 解決いたしました。 回答はとんでもないところにありました。 メインテナーから送られてきていたCGIのデータが /usr/sbin/sendmail /usr/bin/perl ----------------- だったのですが、サンプルとして「確実に動くCGIを一つくれ」と交渉してもらったCGIを見てみましたらなんと !/usr/bin/perl /usr/lib/sendmail -i -t になっておりました・・・ 私のCGIデータをこれらに変えたらあっさりと動くようになりました。 サポートはしつこく私のCGIには全角文字が入っているからだからバイナリデータになってしまう、だことの、それではと全部半角のCGIを使っても動かなかったので「なんだ、全角文字とか関係ないじゃん、というか、このCGI、別のメインテナーでもう10年使っているんですけど」と文句を言ったら今度は私のFTPプログラムがわるいだことの言い出したり。 それでは、と今度はFFFTPの英語版を使ったらやはりだめ。 もうぶちきれました。 はっきり言います。 イタリア人はばかばっか。 自分のやるべき仕事もわからない人ばかり。 とにかく解決いたしました。 ありがとうございました。
- kmee
- ベストアンサー率55% (1857/3366)
状況がよくわかりません。 ftpの転送モードがアスキーとバイナリが違ったところで、改行コードが変換されるくらいなので、「改行コードの違うテキストファイル」にしかならないはずです。 (もしかしたら、漢字コードの変換もしているかもしれませんが、ホームページビルダーは使ったことないので断言できません) また、ファイルがテキストファイルなのかバイナリファイルなのかの判定は難しく ・適当な間隔で改行文字があるからテキスト ・印字可能文字が多く使われてるからテキスト/それ以外のデータが多いからバイナリ ・特定フォーマット固有情報(画像のヘッダ等)があるから、そのフォーマットで採用されている形式 といったことから総合的に判断します。が、誤判定するケースもあります (偶然、アルファベットと改行文字だけになった「バイナリファイル」だったら、テキストファイルと判断されるケースがある) 外国のツールだと、英数字を「文字」と判定し、日本語文字列は「バイナリ」と判定されるケースもあります。 まずは、そのcgiが「変更されてしまう」のか「誤判定される」のかを調べましょう。 サーバー上のファイルを別名でダウンロードして、転送前と比較して変化しているか、変化があるならどのような変化か調べましょう。 他のftpソフトを使うのも手です。 cgiのファイルの改行コードをサーバーのものに合せておいて(おそらくLF)、転送モードをバイナリにする、という方法も考えられます。
補足
補足を入れたのですが反映されていらっしゃらないようですで手短に。 問題解決のために質問を1から3にまとめました。 まったくこれらの質問とは関係のない、とんちんかんな回答はどこから出てこられたのでしょうか? そもそも私は海外製のFTPソフトなどは一切使用してはおりません。
補足
すみません、お書きになられましたことは既に調べてしっているのですが今回はどうしても意味が不明ですので質問1から3とさせていただきました。 なお、技術者からの回答は「日本語文章が入っているからバイナリデータになってしまった」「もともとバイナリだったから送信先でもバイナリになっている。 サーバーが勝手に変更しているわけではない」 といった回答。 しかしながら試作で100%英文のCGIをあげてみても同じように動作せず、回答はあくまで「バイナリデータにこれもなっている」 完全にお手上げになっています。