このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Quid Pro Quo1.02と2.1でCGIを動かすためには?

発言者:Tomtia
( Date Friday, May 22, 1998 20:12:24 )


4時間調べても解決せずに疲れてしまいました。
誰か教えて下さい。

今日初めてサーバを立ち上げてみようと思いQuid Pro Quo1.02をインストール
しましたが、CGIやSSIが上手く動いてくれません。

CGIはもっともシンプルなスクリプトを用意しました。
#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
print "This is test\n\n";
以上ですが、MacPerl上ではきちんと動作します。

それを.cgiの拡張子をつけてURLをしていしても「SERVER ERROR 500」
というエラーが出てきます。

また、SSIは
<!--#config="%A, %B %d, %Y"-->
として時刻を表示する様に書きましたがこれも無視されました。
もちろん
<!--#exec virtual="/counter.cgi"-->
というようにSSIでCGIを呼び出すのも無視されました。

そこで、バージョンが古いからダメなのかと思い2.1をインストールして
同じ事をやってみると、今度はエラーは出なかったのですがスプリクトが
まるみえ状態です!
CGIとして認識してくれてないんですよね。
そしてSSIは無視され続けています・・・。

みなさん、本当にPerlスプリクトで動かしているのでしょうか。
なにも設定しないでCGIやSSIは本当に動くのですか??


田中求之 さんからのコメント
( Friday, May 22, 1998 20:40:44 )

QPQ 1.02 で何の問題もなく動きます。

MacPerl の CGI は、CGI 形式で保存しなければならないという基本的な点は
大丈夫ですね?

SSI については、SSI を使ったファイルの拡張子は .shtml にしなければ
なりませんが、この点は大丈夫でしょうか?

うまく行かないときには、基本的な点から、手順を確認するのが一番ですので。

MacPerlのCGI形式とは? さんからのコメント
( Friday, May 22, 1998 21:17:13 )

早速のレス、有り難うございます。
ところで先程も見かけた単語なのですが、MacPerlのCGI形式とは何でしょう?
SAVE ASのところには「Plain Text」と「RuntimeVersion」の2つがあります
が後者の事なのでしょうか。
でもCGIならテキスト形式で動くのでは・・・?

と思いながらも後者で保存してみたところ、したのようなエラーが!
「You are not authorized to access this page」

NTサーバで同じファイルを動かしてみたところ、ちゃんと動作しました。
やっぱり何か問題があると思われるのですが・・・

html文章は.shtmlにしてもSSIは無視されています。
上記の<!--#config="%A, %B %d, %Y"-->という記述は何か問題ありますか?

みやむら さんからのコメント
( Friday, May 22, 1998 23:07:31 )

>MacPerlのCGI形式とは何でしょう?
古いものを使ってはいませんか?
最新版のMacPerlを手に入れてみてください。
おそらく解決しますので。

みやむら さんからのコメント
( Friday, May 22, 1998 23:09:11 )

リンク忘れでした。

→  MacPerl 5.2.0r4リリース 

tomita さんからのコメント
( Monday, May 25, 1998 11:52:52 )

有り難うございました!
MacPerlの最新をインストールしたら無事CGIが動きました。
よかったー。

でもちょっと疑問は残ります。
CGIはテキストベースの保存で動くものだという認識なのですが
QPQではMacPerlの最新版でCGIとして保存しなければ動かないので
しょうか。

でも本当に有り難うございました。

よしもと さんからのコメント
( Monday, May 25, 1998 12:03:04 )

>CGIはテキストベースの保存で動くものだという認識なのですが

そうとは限らないでしょう。(もちMac以外でも)

>QPQではMacPerlの最新版でCGIとして保存しなければ動かないので
>しょうか。

これはQPQというより、MacOS上で走るHTTPサーバにおけるCGIの実装
によるものです。

田中求之 さんからのコメント
( Monday, May 25, 1998 13:49:09 )

すでによしもとさんからコメントが付いていますが、

>CGIはテキストベースの保存で動くものだという認識なのですが

UNIX の Perl の場合が、たまたまそうであるに過ぎません。正確に言うと、
UNIX の場合でも、CGI プログラムは Perl インタプリタ + スクリプト
によって構成されることになります。スクリプト自体が CGI プログラムなの
ではありません。


tomita さんからのコメント
( Monday, May 25, 1998 17:24:29 )

なるほど、そうなのですか。
ということは、MacPerl自体がコンパイルのようなことをした後のファイルを
作ってくれているということなのですね。
例えばNTサーバだとPerlをインストールしてMIMEを書き換えればテキスト
形式のものでも拡張子を変えるだけで動いてくれますよね。
そのあたりで勘違いしていました。

ふむふむ。ためになります。
ありがとうございました。

tomita さんからのコメント
( Monday, May 25, 1998 19:09:19 )

重ねて質問させて下さい。

jcode.plなどのrequireするスクリプトはどこに置けばよろしいですか?
過去のログに似たようなものがありましたが、解決しません。

現在はQPQフォルダの中にルートフォルダを作成し、htmlもcgiもそこに直接
入れています。cgi自体は動くのですが、requireになると例の、
「jcode.plが見つからない」エラーが出てきます。
そこで、いろいろと動かしてみたところ今度は
# jcode.pl did not return a true value.
File 'Macintosh HD:~.cgi'; Line 49
とでてきました。

LINE49というのはまさしく、require 'jcode.pl';の部分です。

なにか間違っているのでしょうか?
ちなみに今回はすべて「CGI形式で保存」しました(^^)

武藤くん さんからのコメント
( Monday, May 25, 1998 21:33:31 )

require 'jcode.pl';、、、、、、
一番てっとりばやいのは、CGIと同階層におけば認識するはずですけど。
もう一つ、
MacPerlは、最初に立ちあげた時にlibのディレクトリを勝手に認識するんで、
Perlのlibフォルダに入れるのが良いのかと思います。
それと、jcode.plはTXTで保存しないとエラーします。
それと、jcode.plのダウンロードの時に、壊れているかもしれないので、
壊れないようにダウンロードすればよいのかも。(って、どうやって)
※数回いろんな方法でダウンロードしてやっと正常に動いた記憶がある。
あたいにわかるのはこれくらいでし。

田中求之 さんからのコメント
( Tuesday, May 26, 1998 02:31:57 )

>ちなみに今回はすべて「CGI形式で保存」しました(^^)

CGI 以外のもの(ライブラリなど)を CGI 形式で保存したら動きませんよ。

OS の違いによる Perl の扱いの違いなどは、以下のページに登録されている
文書をお読みください。

→  MacPerl Differences in CGI Programming

よしもと さんからのコメント
( Tuesday, May 26, 1998 12:53:06 )

>それと、jcode.plのダウンロードの時に、壊れているかもしれないので、

これって、改行コードがLFになっているだけだったりして...

武藤くん さんからのコメント
( Tuesday, May 26, 1998 13:09:24 )

へっ!?
ありゃぁ!

tomita さんからのコメント
( Tuesday, May 26, 1998 14:31:21 )

今、リンクの張られていたPDFファイルを読みました。
いろいろ分からなかった事が書かれていて勉強になりました。
ライブラリーの問題は解決しました(?たぶん)
たぶんというのは、PDFの説明に従って
require 'jcode.pl';

foreach (keys %INC){
 print "$_ => $INC{$_}\n";
}
というCGIスクリプトを実行し、ライブラリの存在を確認したのですが、
jcode.plが絡むと以下のような文字化けしたものがいつもくっついて
来るのです。

aI*P?p\%?E,%FDネ?\0

もしかしたら内容が壊れているのかもしれません。現在原因究明中です。
着実に前進しています。

それと、JAVA ScriptをQPQで動かしている方がいらっしゃいましたら
留意点など教えて頂けないでしょうか。

だらだらと質問ばかりで申し訳ありません。

kato さんからのコメント
( Wednesday, May 27, 1998 22:54:50 )

Quid Pro Quo 2.1 fでcgiが表示できません。

かんたんなcgiは表示できたのですが、(Hello!と表示するものとか…)
minibbs.cgiをみることができません。
CGIはCGI形式で保存して、jcode.plも改行コードはCRでシフトJISになって
いて、同じ階層(cgi-bin)にいれてあります。URLもローカルのものにして
あるのですが…。なにか設定がまちがっているのでしょうか?

Diagnostic Output
# Can't locate ./jcode.pl in @INC.File 'Macintosh HD:Desktop Folder:local:cgi-bin:minibbs.cgi'; Line 144

というエラーメッセージが出ます。どなたかわかる方いらっしゃいませんか?
超初心者なので、どんな人でもわかるようなQuid Pro Quo 2.1 fの解説が載っ
ているホームページなどありましたら教えてください。

長い文章になってしまって申し訳ありません。つまんない質問ですみません。

田中求之 さんからのコメント
( Wednesday, May 27, 1998 23:41:54 )

エラーメッセージのいうように、スクリプトの中で指定した jcode.pl のパスがおかしい
ようですが?

同じ階層に置いたからよいとか悪いとかではなく、ちゃんとパスが通っているか、あるいは
Lib の読み込みの指定のパスが正しいかどうか、が問題のはずです。

田中求之 さんからのコメント
( Wednesday, May 27, 1998 23:44:26 )

QPQ 2.1 についての解説は、QPQ Plus 2.1 (商品版)のデモ版をダウンロードして、
その中に入っている PDF 形式のマニュアルを読むというのが、一番確実です。

QPQ2.1 は QPQ Plus 2.1 から機能を削ったものなので、基本的なインターフェース
などは同じです。

hightide さんからのコメント
( Thursday, May 28, 1998 01:45:01 )

require './jcode.pl';

と書いてあるところを

require 'jcode.pl';

に書き換えて、jcode.plをminibbs.cgiと同じフォルダに
入れておけば良いのでは?

PEACE さんからのコメント
( Thursday, May 28, 1998 05:40:38 )

はじめまして。PEACEといいます。

minibbsはレスキューさんのやつですよね。
きっとそうだとおもうので、、
hightideさんがおっしゃるように、

#◆日本語コード変換ライブラリ
# minibbs.cgiと同じ場所に設置する場合はこのままでよい.
require './jcode.pl';

をhtghtideさんのようにして、さらに

#◆内容が書き込まれる記録ファイルのパスを設定
# minibbs.cgiと同じ場所に設置する場合はこのままでよい.
$file = './minibbs.dat';

も同じように
$file = 'minibbs.dat';
とすると、ちゃんと動きます。私自身が確認してます。
(空のテキストファイルminibbs.datも忘れずに。)

お役に立てたらうれしいです。では。

kato さんからのコメント
( Thursday, May 28, 1998 13:17:30 )

 みなさんありがとうございますー。
PEACEさんと、htghtideさんのいう通りに書き換えて入れてみたら
無事見ることができました。

 ところで、Mac Perl5で、日本語の表示が文字バケしてしまいます。
JPerlを使うべきなのでしょうか?それとも何か他にいい方法があれば
教えていただきたいのですが…。

ショージ さんからのコメント
( Thursday, May 28, 1998 15:02:32 )

> ところで、Mac Perl5で、日本語の表示が文字バケしてしまいます。

\でエスケープしてやるのが良いと思いますけど,バージョンに問題が
なければJPerlの方が良いと思いますよ.

ショージ
kawano@netjoy.ne.jp

kato さんからのコメント
( Thursday, May 28, 1998 16:25:18 )

>ジョージさん
Mac Perl5で表示される全ての日本語が文字バケしてしまうのです。
Mac Perlで入力した日本語もバケってしまいます。

どうしてでしょうか?すごく基本的な事だったらすみません。

ショージ さんからのコメント
( Friday, May 29, 1998 14:00:24 )

ハーイ,ジョージデス!
って,外人じゃないので(^_^;

> Mac Perl5で表示される全ての日本語が文字バケしてしまうのです。
> Mac Perlで入力した日本語もバケってしまいます。
> どうしてでしょうか?すごく基本的な事だったらすみません。

となるとライブラリ(モジュールって言うんでしたっけ?)の問題で
しょうね.

jcode.plやcgi-bin.plなどのUNIXベースのモジュールの中にはデフォル
トでEUCに変換してしまうものがあります.で,S-jisでかかれたページ
の中にこれらのCGIからの結果を読み込んでしまうと当然のごとく文字
化けをします.

いわゆる基本ですが,プログラムソースからは見えないのでなかなか気
がつきません.初級から中級への登竜門だと思って悩んで下さい.

とりあえず回避するためにはモジュールを読んで改造するか,自分のプ
ログラムを相手の文字コードにあわせるというのがよいでしょう.

で,文字コードがどんな問題があるのは文字化けしているビューアがな
にかにもよるんですが,WebページならCGIからの送出ヘッダに

<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis">

なんてのをつけてみると良いかも知れませんね.メールなら当然JISで送
るべきだし・・・.

そうそう,フレームなんかに入れている場合Netscape Navigator/
Communicatorでは文字コードの取得に失敗している時もありますので,
それが文字化けの原因となっていることも少なくはありません.

たくさん書いちゃってごめんなさい〜.

田中求之 さんからのコメント
( Friday, May 29, 1998 16:57:20 )

>Mac Perlで入力した日本語もバケってしまいます。

MacPerl のエディタのフォントの設定の問題ということはないですか?

kato さんからのコメント
( Wednesday, June 03, 1998 13:17:58 )

>ジョージさん&田中さん
ひゃっ!!ごめんなさいアホでした…。
ありがとうございました。

ところで、ローカルサーバーでSSIが見れないのですが(完全にムシされてしまいます。)
どうしてなのかわかりません。簡単なカウンター表示のSSIです。

CGI自体は見ることができるのですが…

shtml
<!--#exec cmd="cgi-bin/counter.cgi"-->

counter.cgi
$datafile = 'count.dat';

count.datはcgi-binにいれてあります。
何か間違っているのでしょうか?

田中求之 さんからのコメント
( Wednesday, June 03, 1998 15:43:52 )

パスの指定が間違っているということはありませんか?(ページからの相対パス
で指定しているようですが)。

<!--#exec cmd="/cgi-bin/counter.cgi"-->
              ^^
にしておいたほうが確実だと思います。