CGI関連
(Q)CGIプログラムからメール送信するためのsendmailへのパスを教えてください。
(A)はい、sendmail のパスは以下のようになります。
sendmail: /usr/sbin/sendmail
(Q)UUencode のパスを教えてください。
(A)はい、UUencode のパスは以下のようになります。
UUencode: /usr/bin/uuencode
(Q)nkf(ネットワーク漢字フィルタ)はインストールされていますか。
(A)申し訳ありませんが、当社サーバーにはインストールされておりません。
当社サーバーはその利用を日本に限定しておらず、世界中の人の利用を前提にしています。
そのために、日本固有のnkfをインストールすることはしておりません。
ただし、お客様ご自身でインストールしていただくことは可能です。
(Q)CGI プログラム(perl)を起動させると、
「Internal Server Error. The server encountered an internal error or misconfiguration and was unable to complete your request.」が表示されます。
(A)これは概して CGI スクリプト内の問題が原因です。
問題をよく把握するために、以下のいずれかの方法などでテストすることができます。
1 ) perlプログラムの先頭の方に「use CGI::Carp qw(fatalsToBrowser);」と記述して、ブラウザでアクセスしてみます。
そうすると「Internal Server Error」ではなく、詳しいエラーメッセージがブラウザ上に表示されます。
「Internal Server Error」の表示のままの時には、他の方で対処する必要があります。
なお、セキュリティー上、エラーを解決した後にはこの記述は削除すべきです。
2 ) スクリプトの先頭から適当な位置で順次停止させると共に、その時点での変数の値などを表示させます。
停止時点で期待した通りの結果が得られているかを確認します。
スクリプトを途中で停止するには、例えば停止させたい箇所に「__END__」と記述します。
「__END__」以降は無視されるため、記述する場所を移動させることにより、どこでエラーが発生しているか確認します。
記述は、if-else 等のブロック内などは避け、停止させても問題ない箇所にする必要があります。
3 ) SSH(Telnet)ログインしてスクリプトの置いてあるパスに移動し、「perl myscript.pl」と入力します。
または
4 ) SSH(Telnet)ログインしてスクリプトの置いてあるパスに移動し、「myscript.pl」と入力します。最初の1行が perl の位置を正しく表示している場合、
この操作はうまくいきます。
スクリプト内部のエラーを見るには、(3) の方法が便利です。「calling line」(スクリプトの1行目)が問題ないなら、
つまり perl の位置が正しく入力できたなら、(4) の方法が便利です。
5 ) SSH(Telnet)ログインしてスクリプトの置いてあるパスに移動し、「perl -cw myscript.pl」と入力すれば、perlの文法チェックが行われ、
問題となっている部分が明らかになります。
エラーが多数行表示されることがありますが、上から順番に1つずつ解決すると良いようです。
関連してエラーが発生していることが多く、1つ解決するとその他も合わせてエラーが解消することがあります。
6 ) SSH(Telnet)ログインしてスクリプトの置いてあるパスに移動し、「perl -d myscript.pl」と入力して、デバッグモードに入ることにより、
1行ずつスクリプトの進行状況を追うことができます。
(Q)メールプログラムがうまく作動しません。(メールが送信できません。)
(A)さまざまな原因が考えられますが、代表的なものは以下のとおりです。
- メールプログラムのパスは正しいですか。当社では、/usr/sbin/sendmail です。
- nkf(ネットワーク漢字フィルタ)ファイルをお使いの場合、このファイルまでのパスは正しいですか。
- jcode.pl お使いの場合、このファイルまでのパスは正しいですか。
(Q)「File Not Found」または「No Such File or Directory」のエラーが表示されます。
(A)さまざまな原因が考えられますが、代表的なものは以下のとおりです。
- perl または CGI のスクリプトをバイナリーモードではなく、ASCII モードでアップロードしてみてください。
- スクリプト内でインクルードしている別ファイル又はディレクトリ(例えば、sendmail, jcode, nkf, データファイルなど)へのパスは正しいですか?
(Q)(SSH/Telnetを使用して)ローカルモードで perl スクリプトをテストするときに、
次のエラーが表示されます。「Literal @domain now requires backslash at myscript.pl line3, within string. Execution of myscript.pl aborted due to compilation errors.」
(A)これは perl の誤まった解釈が原因です。 perl では「@」は特別な意味を有します。
つまり、「@」は配列(要素表)と認識されるのです。perl が「domain」と名付けられた配列を見つけられないので、エラーが生じます。
バックスラッシュ「\ 」を「@」マークの前に置いて、「@」が、電子メールアドレスに見られるように、普通のマークであることを perl に認識させてください。
(Q)「POST not implemented」というメッセージが表示されます。
(A)おそらく cgiemail にふさわしくないレファレンスを使用しているのでしょう。
別の可能性としては、cgi-bin ディレクトリにまだ置かれていない cgi-bin スクリプトが原因かもしれません。このメッセージの一般的な意味はこうです。
つまり、ウェブサーバは、ユーザーが呼び出している cgi-bin スクリプトをプログラムとして認識していない、むしろ、通常のテキストファイルと考えている、ということなのです。
重要 :
CGI スクリプトは、必ず、ASCII 形式でアップロード・ダウンロードしなければなりません。
また、保存するときも、ASCII 形式でなければなりません。このことはとても重要です。
このガイドラインに従わない場合、プログラムは作動しません。
(Q)「You don't have permission to access」と表示されます。
(A)このエラーメッセージの意味は、アクセスできる許可が無いと言うことです。
該当ファイルに読み込み許可が与えられていないとき、またはディレクトリ上に「index.html」ファイルなどのデフォルトファイルが存在しない状態で、
http://あなたのドメイン名.com/dir/
などと、ディレクトリ止め指定でのアクセスがあった場合に発生します。
(Q)追加したアカウント内に、エラーのないはずのCGIスクリプトがサーバーエラーになって表示されないのですが、どうしてでしょうか。
(A)SSH(Telnet)、FTPアカウントで注意すべき点としまして、CGIスクリプトのオーナーがマスターアカウントでないと動かないということがあります。
CGI設置にあたっては、マスターが検閲のうえで設置する、あるいはマスターが「touch」コマンドなどで空のダミーファイルを前もって設置するなどの方法によっていただくことが必要です。
これらはパーミッション「775」にすることにより、その後追加アカウント(グループメンバー)が自由に上書き修正可能です。
パーミッション「775」等以外のファイルの場合には、これらの問題はありません。ディレクトリ内に置いたCGIスクリプトは、そのディレクトリのオーナーが誰かによっても、同様の結果となります。
追加アカウント管理者が第3者の場合には、アカウント設定後に、
/home/yourdomain
/www/yourdomain
のパーミッションを「711」にすることをおすすめします。こうすることでグループメンバー(追加アカウント)にファイルを不要に公開することを防止できます。その他ディレクトリ、ファイルのパーミッションは適切に設定してください。
(Q)CGIスクリプトを設置しましたが、画像のロードができません。
(A)通例、HTML・画像ファイルはcgi-binディレクトリ内に置くことはできません。他のディレクトリにおいていただくか、スクリプト一式をcgi-binディレクトリ以外に移すようにしてください。
(Q)perlで○○○というソフトを利用したいのですが、可能でしょうか。
(A)インストールにroot権限を有するものはご使用いただけませんが、ご自身でインストール可能なものはご自由にお使い下さい。
ご注意
プログラムによっては、インストールにサーバー管理者の権限(root権限)を必要とするものがあります。サーバー管理者の権限であれば基本的にどのようなことでも行えてしまいます。現在お使いのサーバーは、共有サーバーです。サーバー全体の安全のために、管理者権限を必要とするようなプログラムのインストールはお断りしています。また、プログラムの内容自体もこちらで把握することができませんので、代行設置も行うことはできません。
(Q)サーバーのタイムスタンプのズレについて、対応方法を教えてください。
(A)サーバーは米国時間「Central(中部) CST」で時間設定しております関係上、時差が生じております。申し訳ございませんが、これを日本時間に合わすことはできません。
CGIスクリプトで時間を使用なさる場合には、サーバーマニュアルをご覧いただき、日本時間を取得してください。
(Q)FTPを利用してCGIスクリプトをダウンロードし、市販のホームページ作成ソフトで内容を修正した後に再度アップロードしたところ、CGIスクリプトが動かなくなってしまいました。
(A)市販のホームページ作成ソフトの中には、HTMLコードを勝手に付加する機能がありますので、これらのソフトでCGIスクリプトを修正する時には注意が必要です。
CGIスクリプトの修正には、これらのソフトではなく、TeraPad、秀丸エディタ、WINDOWS付属のメモ帳などを使用するほうがよいかと思います。