Blog

サーバーの設定

今日、初めて利用するWEBサーバーでCGIがerror500になった。

CGIは基本的にちょっとでも記述ミスがあるとこれが出てしまうのだが、
今回使おうとしたCGIは他のサーバーで既に動作確認をしていたものだ。

色々試してみると、改行をLFに修正した上で、
バイナリモードで転送してみると、正常にCGIが動作することがわかった。

わたしはFFFTPでは拡張子が.cgiのものはアスキーモードで転送するようにしているので、
手元のファイルがCR+LFになっていても、サーバーのファイルはLFに変換されるはず。
なのにどうもアスキーモードでの転送が行われていないんじゃないだろうか…?

というわけで、また色々調べてみた。
すると、どうもサーバーの設定でアスキーモードの許可がされていないと、
FFFTPや他のソフトでクライアントがどんなにアスキーモード設定をしていても、
バイナリモードで転送されてしまうようなのだ。
というわけで、サーバー管理者に以下の設定変更を依頼してみた。

vsftpdでAsciiモードによる、アップロード/ダウンロードを許可
vsftpd設定ファイルは、/etc/vsftpd.confあるいは/etc/vsftpd/vsftpd.conf
ascii_upload_enable=YES ←先頭の#を削除
ascii_download_enable=YES ←先頭の#を削除

設定完了後にCGIを転送してみた結果、
無事に今まで通りのアスキーモード転送でCGIが動作するようになった。

今まであんまり改行のCRとかLFとか気にもしてなかったけど、
今回はその違いが身にしみてよくわかりましたとさ…(笑)

たった2文字の為に

WEBではPHPやCGIなどを扱うこともあるけど、
わかってみれば「なんだよ、こんなことかよ!」みたいな事の為に色々調べたり、
ああでもないこうでもないと頭を悩まされることも多い。

わたしは既存のCGIとかPHPとかをなんとなくこうすれば思ったとおりの動作になるかも~、
くらいの改造しか出来ない。
基礎っていうのがきちんと身についていない状態。
そのうちきっちり勉強しようと思うんだけど、
そう思ってるうちはいつまで経ってもダメなんですよね~;

今日はそんな、すごい基礎的っぽいところでつまづいたのでメモしておきます。

どちらかというとPHPの方を改造することが多いんだけど、それも原因かもしれない。
CGIで極簡単な条件分岐をさせたかったので該当箇所にそれをはさんでみた。

動作しない。というか条件に一致してないものまで一致したことになってる!なんでだー!

その時書いてたのが、

if($A == “条件”){print “結果”;}

こんなの。

これダメなんだって・・・ orz

Perlでは

if($A eq “条件”){print “結果”;}

これが正しいらしい。
Perlでは「eq」は文字列が一致しているかどうか
「==」は数字が一致しているかどうかに使うようです。
文字列なのに「==」を使ってたから正しく動作しなかったんだねぇ・・・

ちなみにPHPではどちらも「==」で動作します。

Calendar
2012 年 2 月
« 1 月    
 1234
567891011
12131415161718
19202122232425
26272829  
Archive
Category
Other