- ベストアンサー
cgiがうごきません
ApacheとPerlをインストールしてローカルでの動作確認OKなのですが、HP上では機能しません。 プロバイダー側が作った「アクセス権が認められてません ・・・どうたら、こうたら」のメッセージがでます。 すべてのファイル(cgi,html,pl・・)をEUC(文字)CR+LF (改行)にして、アスキーモードでアップロードしました。 Perlパスやパーミッションは間違いないとは思うのですが 、アクセスすると凄い文字化けになっています。掲示板は機能しません。FTPはFFFTPですので自動改行すると思うの ですが、コードの設定に関係があるのでしょうか? 私はWin98,プロバイダーはUNIX系です。それから、Apache とPerlを使ってエラーを調べられるようなことを聞いたの ですが、どのようにするのでしょうか?お願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 一貫性がないのです。変じゃないですか? それぞれのセキュリティーポリシーですので、公称通りに稼動して いるのであれば、とやかく言う事は出来ません。 > 尚、別本のCGIもローカルでの動作は確認済みです。(T_T) そのスクリプトもInterQでは動かないのでしょうか? それもdbm使っているのですか? dbmpoen に関する行をすべてコメントアウトするとどうなりますか?
その他の回答 (6)
- marimo_cx
- ベストアンサー率25% (873/3452)
> 先回質問しました$myname = $ENV{SCRIPT_NAME}; ( #このファイルの URL) 今更の質問なんですが^^;、このスクリプトは自作ですか? $myname は何の目的で使っている変数でしょう? > スクリプトの始めのほうに書いてある環境変数ですよね、ここを > $myname = http://cgi.・・・・・と書き換えるとおかしくなるでしょうか? このように書き換えている理由は何でしょう? <!-- env_test.cgi --> #!/usr/local/bin/perl print "Content-Type: text/html\n\n:; print "<HTML><HEAD><TITLE>test page!</TITLE></HEAD>\n"; print "<BODY>\n"; foreach (keys %ENV) { print "$_ : $ENV{$_}<BR>\n"; } print "</BODY>\n</HTML>\n"; <!-- env_end of test.cgi --> これを実行してみて下さい、%ENVの意味が解ると思います。 > このスクリプトはdbmのサポートがいるのですが、 ん~、何をするcgiなんでしょう? *.dirと*.pagをローカルで作ってアップロードしないとわけわかめになる事もありますが。 そこの所のパーミッションとファイル所有者は大丈夫な設計でしょうか? でもエラーが500じゃなくて403なんですよねぇ?
補足
またまた、すみません。 $ENVはよくわかりました。CGIスクリプトは掲示板用で、「掲示板を作ろう」と言う手引書に付いていたものです。今度別の本の掲示板スクリプトで試しましたが、htmlファイルは表示するのですが、CGIファイルには移動できません。HPのURLなんですが、http://www.○○○.comがオリジナルドメインで取ったものですが、http://www.interq.co.jp/××/△△△でもアクセスできるのです。2つURLが有る形なのですが、これってパスミスのようなことが起きますでしょうか?FTPソフトのホスト設定はftp.members.interq.or.jpでしてあり、上のアドレスはつかってないです。CGIの呼び出しはhttp://cgi.members.interq.or.jp/××/△△△/test.cgiでしなくてはいけないそうで、一貫性がないのです。変じゃないですか?尚、別本のCGIもローカルでの動作は確認済みです。(T_T)
- marimo_cx
- ベストアンサー率25% (873/3452)
> <AHREF="board.cgi?exec=postform">投稿</A> パスが合っているとして、これはSSIではなくcgiへのリンクですからexec 禁止には該当しないはずです。 ところで、 <!-- test.cgi --> #!/usr/local/bin/perl < そういえばここは環境依存ですが、合ってますか? print "Content-Type: text/html\n\n:; print "<HTML><HEAD><TITLE>test page!</TITLE></HEAD>"; print "<BODY><H1>TEST</H1></BODY></HTML>\n"; <!-- end of test.cgi --> みたいな、絶対動くcgiスクリプトでテストしてみるとどうなりますか? 的確な該当が出来なくてすみません。
補足
marimo_cx さん本当に度々すみません。現状報告します。テストCGIはちゃんと表示します 。(http://cgi.・・・・・から入って)、上の階層でも下の階層でもどこに置いても。それからexecですが、cgiスクリプトの中には#execは見当たりません。if ($cgi{exec} eq "postform")のようなものばかりです。このスクリプトはdbmのサポートがいるのですが、Perlのパスは確認したところ#!/usr/local/bin/perlと同じでいいとのことです。先回質問しました$myname = $ENV{SCRIPT_NAME}; ( #このファイルの URL)スクリプトの始めのほうに書いてある環境変数ですよね、ここを $myname = http://cgi.・・・・・と書き換えるとおかしくなるでしょうか?
- marimo_cx
- ベストアンサー率25% (873/3452)
> $myname=$EN{SCRIPT_NAME}; これは何でしょう?環境変数なら $myname=$ENV{'SCRIPT_NAME'}; というように収得するはずです、あぱっちなら。 あと、今回は機能しないのではなく実行しないのですから 恐らく関係ないと思われます。 > http://cgi.members.interq.or.jp/×××/user-cgi-bin/○○○.cgi 結局これでアクセスしてもエラーは今までと同じというこ となのでしょうか?
補足
度々恐れ入っております。http://cgi.members.interq.or.jp/×××/user-cgi-bin/○○○.cgi ではアクセスは出来ませんでした。interQはexecタグが使えないのですが<AHREF="board.cgi?exec=postform">投稿</A>これって、そのものズバリですか?だとすればこのスプリクトはつかえないってことですよね。どうしようかなあ(T_T)
- marimo_cx
- ベストアンサー率25% (873/3452)
相変わらず“403, Forbidden”なんですね。 # InterQ使った事無いので以下一般論です。 サーバーによっては .pl と .cgi の拡張子が両方とも使えたり、 “どっちか”しか使えない様になっていたりしますが、逆さとい う事はないですよね?(一応念のため) ところで、.cgiをおいてある階層にHTMLファイルを置いてみて、 それって見えますか?すみません、まだ原因考え中なのでとりあ えずそれがどうなるのか教えて下さい。 # とにかく実行してないって事ですからねぇ。 最初の質問の中にご自分が書いていらっしゃいますが、FFFTPは デフォルトのままだとUPLOAD時にFL、DOWNLOAD時にはCR+LFにコ ード変換を自動でしてくれるので気にしなくて平気です。
補足
相変わらず悩んでます。これってパスミスに関係ありますか? オリジナルドメインはhttp://www.×××.com/です。オリジナルドメインでのCGIの呼び出しは出来ないようになっているらしくて、http://cgi.members.interq.or.jp/×××/user-cgi-bin/○○○.cgi で呼び出すそうです。HPにアクセスするときはhttp://www.×××.com/から入っていきます。cgi スクリプトにはURLは打ち込んでません。初期設定で $myname=$EN{SCRIPT_NAME};となってます。ここを書き換えないといけないのでしょうか?もしそれだとすれば、HPのURLはオリジナルドメインのままでもよいのでしょうか?よろしくお願いします。ちなみに同じ階層のHTMLファイルは表示します。
- Tma
- ベストアンサー率48% (13/27)
サーバが UNIX ということは 改行コードは LF です。 #Windows は CR+LF、Mac は CR です。 改行コードに不要な CR がついてしまっているために 正常に動作していないのではないでしょうか?
- marimo_cx
- ベストアンサー率25% (873/3452)
ローカルで動作しているという事なのでスクリプトが間違ってい ないという前提とします。 パーミッションに付いてはセキュリティー上の問題から705じゃ ないと動作しない設定にしているサーバーがあります。 cgiをおいても良いパスがセキュリティーの都合上指定されたパ スでないといけない場合があります。 cgiが任意のパスにおける場合、.htaccessを点検して下さい。 FFFTPのバージョンによるのかもしれませんが、FFFTPでファイ ルをアップロードする時にFFFTPで文字コードを変換すると化 け化けになる事があるので、ローカルでEUC-jpにしておいて、 コード無変換であげるようにして見て下さい。(改行コードの 変換機能は悪さをしないみたいなので気にしなくて良いようで す。) チェックポイントはこんな所だと思うのですが、 > 「アクセス権が認められてません・・・どうたら、こうたら」 という事は、少なくともスクリプトが実行されていないという ことですよね?そうなるとパスか、パーミッションか、.htaccess あたりではないかと思われます。
補足
marimo_cx さんの言うように無変換でアップロードしたら文字化けは直りました。エラーメッセージは「403, Forbidden ・・・」。755はOK。htaccessはいらないプロバイダー(interQ)です。パーミッションが違うのかなあ?ちなみに borad.ini-644 jcode.pl-644 cgi_lite.pm-644 これらが入ってるフォルダ-777 にしました。これ間違ってます?
お礼
marimo_cx さん大変有難う御座いました。親切なアドバイス。初心者の私に付き合っていただき、貴重な時間つかわせてしまって、大変感謝しております。相変わらずお手上げなのですが、すこし熱をさまして、また頑張ります。なにかの折りには又よろしくお願いいたします。感謝感謝m(__)m ほんと感謝です。 m(__)m
補足
marimo_cx さんすみませんです。これで最後にします。別本の掲示板スクリプトはdbmを用いていない単純なものです。(名前・メルアド・コメントのみ入力)これは404のエラー。問題のスクリプトのほうは今回500のエラー、dbmopenをコメントアウトして試しましたが、500のエラー。全然お手上げです。ローカルでは問題ないのに・・。文字と改行コードが途中で変わっちゃうのかなー?別のプロバイダーで試してみようかなー (T_T)