Re: CGIが動かない理由が解らない ( No.1 ) |
|
- ????????? 2013/12/16 06:35
- ????????? stranger
- ?????§??? http://ja.528p.com/
-
#!/usr/bin/perl
print "Content-type: text/html?n?n"; print "<HTML>?n<BODY>?n<TITLE>CGI Script TEST</TITLE>?n"; print "The CGI script was worked!?n</BODY>?n</HTML>?n";
perlの位置はCentOSのrpmパッケージの位置 (これは自分の環境に合わせる) </BODY>の位置が違うと思うよ
|
Re: CGIが動かない理由が解らない ( No.2 ) |
|
- ????????? 2013/12/16 10:50
- ????????? アメリカン
-
いちいち申し訳ありませんが、普通、<title>は<body>の中じゃなくて、<head>というタグの中に入れます。
もっとも、テストするだけならタグ無しで #!/usr/bin/perl print "Content-type: text/html?n?n"; print "This CGI script is working now."; とかでも出ます。
VPSならコンソールが使えるだろうから、Perlのパスはコマンドで調べる。 # whereis perl
Internal Server Errorはブラウザー側で出るエラーだろうから、 詳しく見るにはapacheのエラーログを見るのが正解。
|
Re: CGIが動かない理由が解らない ( No.3 ) |
|
- ????????? 2013/12/16 12:37
- ????????? stranger
- ?????§??? http://ja.528p.com/
-
そうですね
html文ではなく perlの位置と ファイルのユーザ・グループ・パーミッションの問題ですね
perlは実体を/usr/local/binにシンボリックリンクを作っておけばいちいち書き換えなくてもすむし、 perlの記述法を間違えなければ printで表示されますよね
|
Re: CGIが動かない理由が解らない ( No.4 ) |
|
- ????????? 2013/12/16 16:24
- ????????? yoshida
-
strangerさん、アメリカンさんありがとうございます。
test.cgiは修正しました。 これを現在正常動作している掲示板のCGIがあるディレクトリに置いても 動作しません。 perlのパスはシンボリックリンクを張っているので、
# which perl /usr/local/bin/perl
となります。 この状態で同じディレクトリにある掲示板が正常動作して、 test.cgiが動かない理由が解らないのです。
|
Re: CGIが動かない理由が解らない ( No.5 ) |
|
- ????????? 2013/12/16 16:48
- ????????? stranger
- ?????§??? http://ja.528p.com/
-
その掲示板はCGIスクリプトなんですか
perlで動いていますか ファイルのユーザ・グループ・パーミッションを調べてみてください
apacheが標準でcgi-binを用意していると思うけど そこに入れたらどうなりますか パーミッションは755実行権が必要
|
Re: CGIが動かない理由が解らない ( No.6 ) |
|
- ????????? 2013/12/16 17:37
- ????????? Johann
-
すでに指摘されてるけど、apacheのエラーログを見るのが正解。
何かしらヒントが必ず出てる。
|
Re: CGIが動かない理由が解らない ( No.7 ) |
|
- ????????? 2013/12/16 18:29
- ????????? yoshida
-
strangerさん
> その掲示板はCGIスクリプトなんですか > perlで動いていますか
動いている掲示板はもちろんperlスクリプトです。
> ファイルのユーザ・グループ・パーミッションを調べてみてください
ユーザ・グループ・パーミッションとも動いてるCGIもtest.cgiも 同じになっています。
> apacheが標準でcgi-binを用意していると思うけど > そこに入れたらどうなりますか
現在は/var/www/html/cgi-binを作ってその中に入っています。ほとんどすべての CGIは正常に動作しています。正常動作しているディレクトリに先のtest.cgiを 置いても動かないのがなぜなのか解りません。 現在はhttp://www.hostname/cgi-bin/directory/test.cgiとして呼んでいますが、 www直下のcgi-binにアクセスする方法が解りません。 LINUXの技術とは少し外れているかもしれませんがよろしくお願い致します。
|
Re: CGIが動かない理由が解らない ( No.8 ) |
|
- ????????? 2013/12/16 18:42
- ????????? yoshida
-
Johanさん
> すでに指摘されてるけど、apacheのエラーログを見るのが正解。 > 何かしらヒントが必ず出てる。
[Sun Dec 08 03:51:15 2013] [notice] Digest: generating secret for digest authent ication ... [Sun Dec 08 03:51:15 2013] [notice] Digest: done [Sun Dec 08 03:51:15 2013] [notice] Apache/2.2.15 (Unix) DAV/2 configured -- res uming normal operations [Sun Dec 15 03:52:15 2013] [notice] SIGHUP received. Attempting to restart
/etc/httpd/logs/error_log-20131215にはこれしか出ていませんでした。
|
Re: CGIが動かない理由が解らない ( No.9 ) |
|
- ????????? 2013/12/17 00:27
- ????????? アメリカン
-
> 現在は/var/www/html/cgi-binを作ってその中に入っています。ほとんどすべての
>CGIは正常に動作しています。正常動作しているディレクトリに先のtest.cgiを >置いても動かないのがなぜなのか解りません。 >現在はhttp://www.hostname/cgi-bin/directory/test.cgiとして呼んでいますが、 >www直下のcgi-binにアクセスする方法が解りません。
cgi-binというディレクトリはデフォルトでScriptAliasされてます。 (↓httpd.confの抜粋) # # ScriptAlias: This controls which directories contain server scripts. # ScriptAliases are essentially the same as Aliases, except that # documents in the realname directory are treated as applications and # run by the server when requested rather than as documents sent to the client. # The same rules about trailing "/" apply to ScriptAlias directives as to # Alias. # ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
だから、http://www.hostname/cgi-bin/directory/test.cgi にアクセスすると /var/www/cgi-bin/directory/test.cgi を探しに行きます。 (/var/www/html/cgi-bin/directory/test.cgiではありません)
以上が関係しているのかもしれませぬわん。
|
Re: CGIが動かない理由が解らない ( No.10 ) |
|
- ????????? 2013/12/17 09:59
- ????????? yoshida
-
> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
httpd.confを見ると、この行はコメントアウトになっていました。
> だから、http://www.hostname/cgi-bin/directory/test.cgi にアクセスすると > /var/www/cgi-bin/directory/test.cgi を探しに行きます。 > (/var/www/html/cgi-bin/directory/test.cgiではありません) var/www直下のcgi-binには何もありません。空のディレクトリです。 呼び出されて動いているのは、/var/www/html/cgi-bin内のスクリプトです。 リンクはhttp://www.hostmname/cgi-bin/directory/*.cgiとしてあります。 試しにScriptAliasの行のコメントを外してhttpdを再起動させてみましたが 従来通り正常に動作します。なんだかよけいにわけが解らなくなってきました。
|
Re: CGIが動かない理由が解らない ( No.11 ) |
|
- ????????? 2013/12/17 10:01
- ????????? 管理者
-
下記パスの配下に定義されていませんか?
/etc/httpd/conf.d
「httpd.conf」はメインの設定ファイルで、「/etc/httpd/conf.d/*」はインクルード設定になります。
あと、正常にPerlが動作しているパスに、試験用のPerlを設置しても試験用のPerlが動作しないと言うことですか?
|
Re: CGIが動かない理由が解らない ( No.12 ) |
|
- ????????? 2013/12/18 19:09
- ????????? yoshida
-
> 下記パスの配下に定義されていませんか?
> /etc/httpd/conf.d
/etc/httpd/conf.dの中には、README、mod_dnssd.conf、php.conf、proxy_ajp.conf、welcome.confが ありますが、aliasの設定と思われるものはありません。
> あと、正常にPerlが動作しているパスに、試験用のPerlを設置しても試験用のPerlが動作しないと言うことですか?
そういうことなんです。 var | www | html | cgi-bin | directory a.cgi test.cgi
このように設置して、a.cgiは動作しているのに、先のtest.cgiは 500 internal server errorになってしまいます。
|
Re: CGIが動かない理由が解らない ( No.13 ) |
|
- ????????? 2013/12/17 10:36
- ????????? 管理者
-
下記の実行結果を教えていただけますか?
# getenforce
|
Re: CGIが動かない理由が解らない ( No.14 ) |
|
- ????????? 2013/12/17 10:41
- ????????? yoshida
-
> 下記の実行結果を教えていただけますか?
> # getenforce
#getemforce Disabled
となります。
|
Re: CGIが動かない理由が解らない ( No.15 ) |
|
- ????????? 2013/12/17 12:03
- ????????? アメリカン
-
>/etc/httpd/logs/error_log-20131215にはこれしか出ていませんでした。
リンクで同じですが、 /var/log/httpd/error_log (最新ログ)にも何も無いのですか?
|
Re: CGIが動かない理由が解らない ( No.16 ) |
|
- ????????? 2013/12/17 12:18
- ????????? 管理者
-
なんとなくですが・・・・
サーバのロケールにあった文字コードで、Perlは保存していますよね?? デフォルトでは「UTF-8」です。
|
Re: CGIが動かない理由が解らない ( No.17 ) |
|
- ????????? 2013/12/17 12:48
- ????????? Johann
-
アクセスログも見てみましょう。何かしら出ているはずですし、出ていないならそもそもリクエストが正常にCGIに届いていない可能性があります。
|
Re: CGIが動かない理由が解らない ( No.18 ) |
|
- ????????? 2013/12/17 13:30
- ????????? stranger
- ?????§??? http://ja.528p.com/
-
DocumentRoot "/var/www/html"に設定されていて
/var/www/html/cgi-bin/にcgiファイルまたはディレクトリが配置され
http://www.hostname/cgi-bin/directory/test.cgi としてアクセスするなら
ScriptAliasですべてのファイルをスクリプトとして実行する設定か
ScriptAlias /cgi-bin/ "/var/www/html/cgi-bin/"
<Directory "/var/www/html/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>
または 一般ファイルが含まれるなら Aliasを設定してoptionsでCGIの実行を許可する設定にします
Alias /cgi-bin/ "/var/www/html/cgi-bin/"
<Directory "/var/www/html/cgi-bin"> AllowOverride None Options ExecCGI AddHandler cgi-script .cgi .pl Order allow,deny Allow from all </Directory>
|
Re: CGIが動かない理由が解らない ( No.19 ) |
|
- ????????? 2013/12/17 14:12
- ????????? yoshida
-
> /var/log/httpd/error_log (最新ログ)にも何も無いのですか?
test.cgiにアクセスしたログはありませんでした。
|
Re: CGIが動かない理由が解らない ( No.20 ) |
|
- ????????? 2013/12/17 14:21
- ????????? アメリカン
-
>test.cgiにアクセスしたログはありませんでした。
Johannさんがおっしゃるようにaccess_log の方はいかがですか?
|
Re: CGIが動かない理由が解らない ( No.21 ) |
|
- ????????? 2013/12/17 14:33
- ????????? yoshida
-
管理者さん
普段はFTPクライアント(NextFTP)で管理しており、すべてのCGIスクリプトは 同じように転送していますので、文字コードは大丈夫だと思います。
Johannさん error_logに下記のように出ていたので
Tue Dec 17 13:59:32 2013] [error] [client 124.100.12.41] (2)No such file or directory: exec of '/var/www/html/cgi-bin/JGKxx2r3Wz/test.cgi' failed [Tue Dec 17 13:59:32 2013] [error] [client 124.100.12.41] Premature end of script headers: test.cgi
そんなはずはないと確認してみました。 [root@hostname ~]# cd /var/www/html/cgi-bin/JGKxx2r3Wz [root@hostname JGKxx2r3Wz]# ls count.dat honey.log img jcode.pl menut.html test.html honey.cgi icon.pl index.html menu.html test.cgi
strangerさん 両方の方法を試してみましたが、状況は変わりません。test.cgiと今回のことの 発端になったcgiだけが動きません。他のCGIは正常動作しています。
|
Re: CGIが動かない理由が解らない ( No.22 ) |
|
- ????????? 2013/12/17 14:48
- ????????? アメリカン
-
エラーは出てましたね・・・
>Premature end of script headers: test.cgi
test.cgiのあるディレクトリに移動して # od -tx1 -c test.cgi を実行してください。ダンプ表示されますので、それを掲示板に貼り付けてください。
|
Re: CGIが動かない理由が解らない ( No.23 ) |
|
- ????????? 2013/12/17 14:50
- ????????? 管理者
-
全角スペースが混在しているとか?
何かしらの文字コードが不正に思われますが・・・・
|
Re: CGIが動かない理由が解らない ( No.24 ) |
|
- ????????? 2013/12/17 14:53
- ????????? yoshida
-
> test.cgiのあるディレクトリに移動して > ダンプ表示されますので、それを掲示板に貼り付けてください。
以下のようになりました。
[root@hostnameb JGKxx2r3Wz]# od -tx1 -c test.cgi 0000000 23 21 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e # ! / u s r / l o c a l / b i n 0000020 2f 70 65 72 6c 0d 0a 70 72 69 6e 74 20 22 43 6f / p e r l ?r ?n p r i n t " C o 0000040 6e 74 65 6e 74 2d 74 79 70 65 3a 20 74 65 78 74 n t e n t - t y p e : t e x t 0000060 2f 68 74 6d 6c 5c 6e 5c 6e 22 3b 0d 0a 70 72 69 / h t m l ? n ? n " ; ?r ?n p r i 0000100 6e 74 20 22 3c 48 54 4d 4c 3e 5c 6e 3c 54 49 54 n t " < H T M L > ? n < T I T 0000120 4c 45 3e 43 47 49 20 53 63 72 69 70 74 20 54 45 L E > C G I S c r i p t T E 0000140 53 54 3c 2f 54 49 54 4c 45 3e 5c 6e 22 3b 0d 0a S T < / T I T L E > ? n " ; ?r ?n 0000160 70 72 69 6e 74 20 22 3c 42 4f 44 59 3e 5c 6e 54 p r i n t " < B O D Y > ? n T 0000200 68 65 20 43 47 49 20 73 63 72 69 70 74 20 77 61 h e C G I s c r i p t w a 0000220 73 20 77 6f 72 6b 65 64 21 5c 6e 3c 2f 42 4f 44 s w o r k e d ! ? n < / B O D 0000240 59 3e 5c 6e 3c 2f 48 54 4d 4c 3e 5c 6e 22 3b 0d Y > ? n < / H T M L > ? n " ; ?r 0000260 0a ?n 0000261
|
Re: CGIが動かない理由が解らない ( No.25 ) |
|
- ????????? 2013/12/17 14:55
- ????????? 管理者
-
改行コードが<CR><LF>となっていますが、合っていますか?
|
Re: CGIが動かない理由が解らない ( No.26 ) |
|
- ????????? 2013/12/17 15:09
- ????????? アメリカン
-
vi test.cgi
でファイルを開いてエスケープキーを押して(コマンドモードに) :set fileformat=unix (Enterキー)
またエスケープキーを押して(コマンドモードに) :wq (Enterキー)
これで改行が0aだけになると思います。 またダンプして確認してください。
|
Re: CGIが動かない理由が解らない ( No.27 ) |
|
- ????????? 2013/12/17 18:10
- ????????? yoshida
-
[root@hostname JGKxx2r3Wz]# od -tx1 -c test.cgi
0000000 23 21 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e # ! / u s r / l o c a l / b i n 0000020 2f 70 65 72 6c 0a 70 72 69 6e 74 20 22 43 6f 6e / p e r l ?n p r i n t " C o n 0000040 74 65 6e 74 2d 74 79 70 65 3a 20 74 65 78 74 2f t e n t - t y p e : t e x t / 0000060 68 74 6d 6c 5c 6e 5c 6e 22 3b 0a 70 72 69 6e 74 h t m l ? n ? n " ; ?n p r i n t 0000100 20 22 3c 48 54 4d 4c 3e 5c 6e 3c 54 49 54 4c 45 " < H T M L > ? n < T I T L E 0000120 3e 43 47 49 20 53 63 72 69 70 74 20 54 45 53 54 > C G I S c r i p t T E S T 0000140 3c 2f 54 49 54 4c 45 3e 5c 6e 22 3b 0a 70 72 69 < / T I T L E > ? n " ; ?n p r i 0000160 6e 74 20 22 3c 42 4f 44 59 3e 5c 6e 54 68 65 20 n t " < B O D Y > ? n T h e 0000200 43 47 49 20 73 63 72 69 70 74 20 77 61 73 20 77 C G I s c r i p t w a s w 0000220 6f 72 6b 65 64 21 5c 6e 3c 2f 42 4f 44 59 3e 5c o r k e d ! ? n < / B O D Y > ? 0000240 6e 3c 2f 48 54 4d 4c 3e 5c 6e 22 3b 0a n < / H T M L > ? n " ; ?n 0000255
これで動くようになりました。問題のCGIでも同じことを試してみます。
|
Re: CGIが動かない理由が解らない ( No.28 ) |
|
- ????????? 2013/12/18 10:43
- ????????? アメリカン
-
ご存知だと思いますが、Windowsでテキストを普通に作ると改行はCRLFになります。
転送ソフトにもよると思いますが、普通、転送するときにテキストモードで転送すると CRLFをLFのみに変換してくれます。バイナリーモードで転送するとCRLFのまま 転送されてしまいます。
もちろん、エディターでスクリプトを作るときに、改行をLFのみに設定してあれば バイナリー転送できます。
追記ですが、Windows機の端末からviで開いてテキストを貼り付けたりすると改行変換されるか されないか微妙です。 また配布されている掲示板等のスクリプトはサーバー機で展開することも考慮して最初からLFのみに なっていますから、Windows機で展開してバイナリー転送しても問題ありません。 注意するのは自作のスクリプトや配布スクリプトを改変してセーブするときです。
文字コードも日本語を扱うときには要注意です。システムの文字コード、スクリプト自体の 文字コード、スクリプトが扱うデーターの文字コード、DBならDBが保存する文字コードなど しっかり把握した上でないと適切なスクリプト等は作れません。
|
Re: CGIが動かない理由が解らない ( No.29 ) |
|
- ????????? 2013/12/17 15:24
- ????????? yoshida
-
アメリカンさん
管理者さん Johannさん
皆さんありがとうございました。どうして問題のCGIだけCRLFで送られていたのか 解りませんが、注意して進めたいと思います。
|