perl-CGIで、プログラムエラーでもないのに画面が真っ白になる

シェル上ではエラーなく実行できることを確認しているperl-CGIスクリプトが、ブラウザ上でたたくとブラウザ内は白い表示のままになる。スクリプト自体はFTPにてアップロードして実行しました。

CGI表示テスト用スクリプト

#!/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)にてインストールしています。

  • Vine Linux4.1
  • Apache 2.2.3
  • perl 5.8.6
  • vsftpd 2.0.3

HTMLヘッダ宣言が間違っているのかもしれないと思ったが違うみたいです。

perl-CGIとして実行してくれていないように見えます。

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)だったのを思い出しました。設定ファイルを見てみたら、該当箇所はコメントアウトされていました。