須藤さん、化けるというのは、メモ帳などのエディタでちゃんと
読めないと言う意味ですよね?
そのばあいは、ko とか、nkf とか言うツールがありますので、
それらのツールでコード体系を Shift_JIS + crlf に変換してみて下さい。
ko は、Vector に合ったと思います。
ただ、単純に変換するだけでは、不味い場合があります。
その辺りの詳しいことは、
Perlメモ http://www.din.or.jp/~ohzaki/perl.htm
を参照してみて下さい。
須藤さん、
エンコードを自動選択にしておけばいいのではないでしょうか(?)。
ただし混在しているとだめだと思います。
須藤です。ありがとうございました。今まで動かなかったCGIプログラムが
すべて動作するようになりました。本当に感謝しております!!!
前回言っていた「cgi-lib.pl」は片っ端からありそうなところを探した結果
CD-ROM内に収録されていました。てっきりCD-ROM内でしか使わないのでは
と思えるウィンドウズ未登録ファイルがCD-ROM内にたくさんある中、気にせずにいた私が
知識不足だったと思います。ご迷惑をおかけしました。
さて、CD-ROM内から直接エディタにCGIプログラムをコピーすると
文字化けするわけが、htmlではshift_jisコードのところを、プログラムは内ではEUCコード
を使用しているということで、普通にブラウザでcgiを動作させると必ず文字化けします。
(ブラウザでEUCコードにエンコードすると正常に表示されます)
unix系サーバ上で使用するコードという事みたいですが、
この文字化けには何か設定が必要なのでしょうか。それともブラウザで表示させるときにはshift_jisとEUCコードを切り替えていればよいのでしょうか。
実際cgiをアップさせたときにどうなるのか気になりましたので質問させていただきます。
須藤さん、
perlfunc は、Perl の付属ドキュメントの中にあります。
ActivePerl の 6xx なら、C:\Perl\html\index.html を開けばわかると思います。
何が問題なのかはもちろんわかっているのですが、前回はあえて説明しませんでした。すみません。
そのエラーメッセージは、
urllink.cgi の 14行目で cgi-lib.pl が必要だと指定してあるが、その cgi-lib.pl が見つからない
という意味です。
cgi-lib.pl を探す時には、 @INC に指定している C:\Perl\lib と C:\Perl\site\lib と . (カレントディレクトリ、つまりこの場合は C:\www\user\public_html\cgi-bin)とを探したが、どこにもない、というわけです。
ですから、とりあえずは、urlink.cgi と同じところに cgi-lib.pl をコピーしておけば、このエラーは解消します。次の jcode.pl についても同様です。
cgi-lib.pl や jcode.pl はよく使うでしょうから、C:\Perl\lib または C:\Perl\site\lib にコピーしておけば、その方が便利でしょう。
そうしておかないと、 cgi-lib.pl や jcode.pl を毎回それを使う .cgi ファイルと同じディレクトリ(フォルダ)にコピーしないといけなくなります。
須藤です。紹介していただいた「エラーメッセージ自体の検索」で検索したところ該当しそうなコメントがあったのですが、どうも完全に一致する対策事項が見つかりません。コメント集から「エラー文中の文末に”line○○”と、エラーがあると思われる行が表示されている」というようなことが書かれていましたので、その行を調べてみました。あるCGIプログラムのエラー文が下のようなものでした。
Error 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
Can't locate cgi-lib.pl in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:\www\user\public_html\cgi-bin\urllink.cgi line 14.
line14とその近辺のプログラムが次のものです。
# ライブラリの挿入
require 'cgi-lib.pl';
require 'jcode.pl';
ちなみにline14にあるのが「require 'cgi-lib.pl';」です。ここにどんな問題があるのか分かりませんでしょうか。また、
エラー文を「perldiag(木村浩一さんのページ)」で探したところ「Can't locate %s in @INC 」がありました。その中の解説文で「perlfunc」というページのアクセス方法を教えてくれませんでしょうか。お願いします。
須藤さん、
そのエラーは print "Content-type:... のところはまったく関係ありません。
スクリプトを実行する 前 のエラーだからです。
まあそれにしても「Content-Type が正しくありません」というメッセージに眼を奪われてしまうと確かに誤解を招きやすい表現ですから、直そうとは思っています。
「内部エラーです」とでも読み替えてください。
そのあたりの事情は、いとさんがまとめてくれている全文検索の中のエラーメッセージ自体の検索で、「Content-Type ヘッダが正しくありません」にチェックを入れて検索してみれば、ある程度理解がすすむと思います。
肝心なのは「CGI出力メッセージ」の後の英語のエラーメッセージです。
同じくエラーメッセージ自体の検索で、「Can't locate … in @INC」にチェックを入れて検索し調べてみてもらえばわかるかとは思うのですが、ちょっと見た限りではあまりわかりやすい回答がありませんね。
とりあえず、一通り眼を通してみて、それでもどうすればいいのかわからない場合は、再度ご質問下さい。
「サンプルスクリプト集」の前に、CGIやPerlの入門書を読んでもらう方がよいかもしれません。
須藤です。前回は質問の内容が不鮮明であった事を許してください。まだまだビギナーなのでプログラム中で具体的に悪いところを発見し明確に表現する能力がまだありません。これから頑張りたいと思います。さて、前回紹介してくださった「AN HTTPDを確実に動かす方法」は非常に役に立ち、cgiプログラム(マニュアルにあった、HELLO!!と表示するプログラム)を動作させることが出来ました。本当に感謝しております。これで他のcgiプログラムも動作するだろうと思い、早速エディタを使ってサンプルスクリプト集CD-ROMからコピー&ペーストで新しく同じファイルを作成して4種のcgiプログラムを作り、フォルダの中に入れました。ところが、そのファイルの中に正常に動作するものとそうでないものが出たのです。正常に動作しないものについては,以下のエラーが出ます。(日記自動書きこみcgiファイル)
Error 5004つのファイル全てを調べたのですが,
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
Can't locate cgi-lib.pl in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:\www\user\public_html\cgi-bin\diary.cgi line 10.
ちなみにヘッダとうたわれているのは下の行です。
# ヘッダ出力
print "Content-type: text/html\n\n<html><head><title>$title</title></head>\n";