perl-CGIで、プログラムエラーでもないのに画面が真っ白になる
シェル上ではエラーなく実行できることを確認しているperl-CGIスクリプトが、ブラウザ上でたたくとブラウザ内は白い表示のままになる。スクリプト自体はFTPにてアップロードして実行しました。
#!/usr/bin/perl use strict; use warnings; #ヘッダ宣言 print "Content-Type: text/html; charset=Shift_JIS", "\n\n"; print <<HTML; <html> <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis"/> <title>CGI_test</title> </head> <body> CGI_test </body> </html> HTML
環境は以下のとおりで、アプリはすべてパッケージ管理(apt-get)にてインストールしています。
HTMLヘッダ宣言が間違っているのかもしれないと思ったが違うみたいです。
1行目の実行パスは問題はないので、Apacheの設定に問題があるのかと思ったのだけれど、いろいろ調べたらどうやら原因はFTPサーバの問題らしいです。
解決策1
実行パスの最後にハイフンを追加するといいらしく、とりあえず動くことになった。
#!/usr/bin/perl --
解決策2
原因は、パッケージでインストールしたVSFTPDの初期設定でアスキーモードの設定部分がコメントアウトされていることらしいです。そのため、スクリプトの改行部分をうまく処理してくれないみたいですが、詳細は不明です。
/etc/vsftpd/vsftpd.confを編集する
# ascii_upload_enable=YES # ascii_download_enable=YES
ascii_upload_enable=YES ascii_download_enable=YES
コメントをはずすとハイフンなしでも動作するようになりました。
今回、参考にした他の事例を見ると、RH系のパッケージの場合にでるのかもしれないです。
http://fedora.jp/pipermail/users/2006-December/011711.html
http://sakaguch.com/PastBBS/0037/B0018450.html
別件で、パッケージによるインストールがポリシーのホスティング先のサーバがRHELで、FTPサーバもVSFTPD(vsftpd 2.0.1)だったのを思い出しました。設定ファイルを見てみたら、該当箇所はコメントアウトされていました。