FTP:アスキー、バイナリモード転送:EUC変換って?
PHP (55 items)
2004年11月04日
phpのTipsではないですが、Unix系サーバーに絡むファイル転送について。
ぶっちゃげ、Windows畑で育ってきた私にとって、文字コード変換とか苦手です。。
ASP開発なんかでも、開発しているクライアント端末、
動いているWEBサーバー共にWindows環境(IISサーバーの場合)であれば、
こんな文字コードとか考えなくていいんです。。
しかし、やはり安定して動くサーバーといえばUnix系。
そのサーバーに対して、PHPなんかをFTPでファイル転送する際に、
ついついいつもの調子で、ぽけーっとしていると、
クライアントとサーバーの文字コードが違うんで、全然動かなかったりします・・。
そこで、これらについて、改めて簡単にまとめてみよっと。。
ぶっちゃげ、Windows畑で育ってきた私にとって、文字コード変換とか苦手です。。
ASP開発なんかでも、開発しているクライアント端末、
動いているWEBサーバー共にWindows環境(IISサーバーの場合)であれば、
こんな文字コードとか考えなくていいんです。。
しかし、やはり安定して動くサーバーといえばUnix系。
そのサーバーに対して、PHPなんかをFTPでファイル転送する際に、
ついついいつもの調子で、ぽけーっとしていると、
クライアントとサーバーの文字コードが違うんで、全然動かなかったりします・・。
そこで、これらについて、改めて簡単にまとめてみよっと。。
■2つの転送モードについて(アスキーモードとバイナリーモード)
・アスキーモード
ファイルの改行コードを変換してアップロードする。
・バイナリモード
ファイルの改行コードを変換せず、そのままアップロードする。
両者の違いは、一言で言うと上記のようになるでしょうか。
つまり、アスキーモードで転送すべきファイルは、テキスト形式で構成されるファイルとなります。
ファイル種類で言えば、”.txt”や”.log”のようなテキストファイルや、
”.html”や”.css”といったHTMLに絡むファイル、”.cgi”、”.php”等のスクリプトファイル。
要は、テキストベースで扱われたり、実行されたりするファイルは、これにあたります。
逆に、バイナリモードで転送すべきファイルは、
”.jpg”、”.gif”等の画像ファイルや、”.zip”等の圧縮ファイル。
要は、テキストエディタで見ても何のこっちゃわからんが、
それぞれ見たり使用するソフト等で、動作したり扱う事ができる、
「実行形式のファイル」がこれにあたります。
この事から、FTP転送を行うときには、
ファイルの種類によって、正しく転送モードを指定しないといけません。
”.php”や”.pl”等のスクリプト形式のプログラムは、アスキーモードで転送するのが基本です。
でないと、プログラムがうまく動きませんからね。。
何でうまく動かないかというと、改行コードが変だと、
それぞれのスクリプトの記述が変に取られて動かない可能性があるのです。
例えば、PHPであれば、各命令の末尾、すなわち改行は”;(セミコロン)”で区切られます。
これであれば、PHPが解析され実行される時に、変な取られ方はしません。
しかし、改行自体が”改行”として取られるような記述。
例えば、CGI版PHPを作成した時の、1行目の記述
「#!/usr/local/bin/php」
なんかは、アスキーモードで改行されないと、改行してしてないと認識され、
この記述は2行目の「<?php」以降、延々と1行目とみなされます。
ってなると、
”Error Message: No such file or directory ”みたいなエラーとなって、
「#!/usr/local/bin/php」のパスが見つからないってな、おかしなエラーとなるのです。
FTP転送するには、”FFFTP”といったソフトを使うのが一般的で、
それらには、転送モードを指定する事ができます。
ファイルの種類毎に、転送モードを指定すれば確実かもしれませんが、
それも面倒くさいので、大概のソフトには”自動切換機能”がついてます。
まあ、それ自体の設定はしないといけないので、
アスキーコードで転送するべき、ファイルの拡張子を指定する事になるでしょう。
”FFFTP”では、”.cgi”や”.pl”はデフォルトで指定されてるので、
意識せずとも、これらのファイルはアスキーモードで転送されます。
しかし、”.php”はデフォルトでは入ってなさそうです。。
一応確認して、なければ設定します。
■サーバー転送時のEUC変換
大概のレンタルサーバーの文字コードは、EUCだと思われます。
Unix系のレンタルサーバーが多いのは、Unixがそれだけ安定して動くからです。
私のようにWindowsのPCを使っている人が、
上記で言うテキスト形式のファイルを、EUCベースのサーバーに転送する際は、
EUCに変換して転送するのが基本です。
この機能は、”FFFTP”を始めとするFTPソフトに付いていますので、
”EUC変換”の形で転送すれば、FTPソフトが勝手にEUCに変換してくれます。
これをしないと、特に”.php”や”.cgi”、”.pl”等のスクリプト系プログラムは、
またまたうまく動作してくれません。
■その他
一応、上記の事を理解していれば、クライアントとサーバーの文字コードが違っても、
うまく対応する事ができます。
上記2つのモードは大雑把に、
”アスキーモードは何か勝手に変換してくれる”
”バイナリモードは何もせんと、ファイルの内容そのままで転送してくれる”
と覚えていればいいのではないでしょうか。
場合によっては、”.php”等のスクリプトファイルを、
変換せずにそのまま転送したい場合も起こりうります。
例えば、サーバーのスクリプトファイルを修正しようと転送してきたが、
文字化けして見れなかった場合。
それがEUCのファイルであれば、バイナリーモードでそのファイルをクライアントに転送し、
EUCの文字コードを読めるエディタで修正。
それを、そのままバイナリモードでサーバに転送すれば、修正は反映され正しく動作します。
・アスキーモード
ファイルの改行コードを変換してアップロードする。
・バイナリモード
ファイルの改行コードを変換せず、そのままアップロードする。
両者の違いは、一言で言うと上記のようになるでしょうか。
つまり、アスキーモードで転送すべきファイルは、テキスト形式で構成されるファイルとなります。
ファイル種類で言えば、”.txt”や”.log”のようなテキストファイルや、
”.html”や”.css”といったHTMLに絡むファイル、”.cgi”、”.php”等のスクリプトファイル。
要は、テキストベースで扱われたり、実行されたりするファイルは、これにあたります。
逆に、バイナリモードで転送すべきファイルは、
”.jpg”、”.gif”等の画像ファイルや、”.zip”等の圧縮ファイル。
要は、テキストエディタで見ても何のこっちゃわからんが、
それぞれ見たり使用するソフト等で、動作したり扱う事ができる、
「実行形式のファイル」がこれにあたります。
この事から、FTP転送を行うときには、
ファイルの種類によって、正しく転送モードを指定しないといけません。
”.php”や”.pl”等のスクリプト形式のプログラムは、アスキーモードで転送するのが基本です。
でないと、プログラムがうまく動きませんからね。。
何でうまく動かないかというと、改行コードが変だと、
それぞれのスクリプトの記述が変に取られて動かない可能性があるのです。
例えば、PHPであれば、各命令の末尾、すなわち改行は”;(セミコロン)”で区切られます。
これであれば、PHPが解析され実行される時に、変な取られ方はしません。
しかし、改行自体が”改行”として取られるような記述。
例えば、CGI版PHPを作成した時の、1行目の記述
「#!/usr/local/bin/php」
なんかは、アスキーモードで改行されないと、改行してしてないと認識され、
この記述は2行目の「<?php」以降、延々と1行目とみなされます。
ってなると、
”Error Message: No such file or directory ”みたいなエラーとなって、
「#!/usr/local/bin/php」のパスが見つからないってな、おかしなエラーとなるのです。
FTP転送するには、”FFFTP”といったソフトを使うのが一般的で、
それらには、転送モードを指定する事ができます。
ファイルの種類毎に、転送モードを指定すれば確実かもしれませんが、
それも面倒くさいので、大概のソフトには”自動切換機能”がついてます。
まあ、それ自体の設定はしないといけないので、
アスキーコードで転送するべき、ファイルの拡張子を指定する事になるでしょう。
”FFFTP”では、”.cgi”や”.pl”はデフォルトで指定されてるので、
意識せずとも、これらのファイルはアスキーモードで転送されます。
しかし、”.php”はデフォルトでは入ってなさそうです。。
一応確認して、なければ設定します。
■サーバー転送時のEUC変換
大概のレンタルサーバーの文字コードは、EUCだと思われます。
Unix系のレンタルサーバーが多いのは、Unixがそれだけ安定して動くからです。
私のようにWindowsのPCを使っている人が、
上記で言うテキスト形式のファイルを、EUCベースのサーバーに転送する際は、
EUCに変換して転送するのが基本です。
この機能は、”FFFTP”を始めとするFTPソフトに付いていますので、
”EUC変換”の形で転送すれば、FTPソフトが勝手にEUCに変換してくれます。
これをしないと、特に”.php”や”.cgi”、”.pl”等のスクリプト系プログラムは、
またまたうまく動作してくれません。
■その他
一応、上記の事を理解していれば、クライアントとサーバーの文字コードが違っても、
うまく対応する事ができます。
上記2つのモードは大雑把に、
”アスキーモードは何か勝手に変換してくれる”
”バイナリモードは何もせんと、ファイルの内容そのままで転送してくれる”
と覚えていればいいのではないでしょうか。
場合によっては、”.php”等のスクリプトファイルを、
変換せずにそのまま転送したい場合も起こりうります。
例えば、サーバーのスクリプトファイルを修正しようと転送してきたが、
文字化けして見れなかった場合。
それがEUCのファイルであれば、バイナリーモードでそのファイルをクライアントに転送し、
EUCの文字コードを読めるエディタで修正。
それを、そのままバイナリモードでサーバに転送すれば、修正は反映され正しく動作します。
前の記事 次の記事
この記事に関連した過去記事一覧は画面下にあります。
Comments
コメントは、まだ書かれていません
Add Comments
Trackback
ネットビジネス用CGI Perl HTML Javascriptの情報サイト wrote:
FTPソフトと転送モード:
今回紹介するソフトウェアは、FTPソフトと呼ばれるソフトウェアです。
FTP(File Transfer Protocol)ソフトとは、サーバーに接続して、あなたのパソコン上にあるファイルをサーバーに送ったり、逆にサーバーにあるファイルをあなたのパソコンに送ったり、サーバー上においてある、あなたのホームページのファイルやCGIファイルなどの一覧を見ることができるソフトウェアです。
インターネットエクスプローラなどにも、簡易なFTPクライアント機能が内蔵されていますが、あくまで簡易なものなので、専用のFTPソフトを用意しておくとよいでしょう。
ちなみに、あなたのパソコンから、インターネットサーバーにファイルを移動させることを、アップロードといいます。
逆に、インターネット上から、あなたのパソコンにファイルを移動させることを、ダウンロードといいます。
2006年03月23日 07時30分45秒
Trackback URL
http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=339