アプリ版:「スタンプのみでお礼する」機能のリリースについて

すみません、以前も質問したのですが、残念ながら解決に至らなかったので
ここでまた質問させていただきました。お詳しい方のアドバイスをよろしくお願い致します。



cgi-binの中にauctというディレクトリを入れその中にあるindex.cgiにアクセスしたいのですが
http://localhost/cgi-bin/auct/index.cgi
とアクセスすると、500 internal server error となってしまいます。

httpd.confの設定は

scriptalias /cgi-bin/ "/var/www/cgi-bin/"を
         
          ↓

alias /cgi-bin/ "/var/www/cgi-bin/"と変え(#は外しています)、



<Directory "/var/www/cgi-bin">
のoptionsをnoneからExecCGIにしました。

あと #AddHandler cgi-script .cgi の#は外しました。

scriptaliasをaliasに変えたのはindex.cgiにアクセスすると、同ディレクトリ内にある、start.shtmlというファイルを開くという設定になっているので、それをCGIと認識されないようにするためにしました。

そのほかはデフォルトの状態ですので、documentrootはvar/www/htmlです。


各CGIのperlのパスは#!/usr/bin/perlとしていて
実際そこにperlがあるか確認もしました。

設定した後httpdの再起動もしました。

error log は
premature end of script headers: index.cgiと
File does not exist: /var/www/html/favicon.ico
となっています。

この設定でWindowsのapacheはCGIが動作したのですが、fedora core3ではうまくいかないのは
どうしてでしょうか?アドバイスお願いいたします。

A 回答 (9件)

こんにちは。



> File does not exist: /var/www/html/favicon.ico
こっちは動作しない事とは関係ないですね。

> premature end of script headers: index.cgi
これはいくつか理由が考えられますね。

CGIをFedoraサーバにFTPするときの転送モードはasciiになっているでしょうか。

ascii転送されているのでしたら、CGIの最初のprint文がこれになっていないとか。
print "Content-type: text/html\n\n" ;
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
説明不足ですみませんでした。
転送モードはasciiでいたしました。
あと確認しましたところ、最初のprint文は
print "Content-type: text/html\n\n" ;
となっていました。
あと補足をさせていただくと、動作に
関係があると思われるcgi-binのファイルとディレクトリの構成は.
[cgi-bin]
....├ [auct]
...........├ [ pl ] --- 705,755
...................├ [ lib ] --- 755
...................├ ap.cgi --- 644
...................├ category.cgi --- 644
...................├ cgi-lib.pl --- 644
...................├ comu.cgi --- 644
...................├ config.cgi --- 644
...................├ image.pl --- 644
...................├ index.html --- 644
...................├ jcode.pl --- 644
...................├ mail.cgi --- 644
...................├ mng.cgi --- 644
...................├ show.cgi --- 644
...................├ usr.cgi --- 644
...................└ wwwis.pl --- 644

...........├ auction.cgi --- 705,755
...........├ count_down.cgi --- 705,755
...........├ cron.cgi --- 705,755
...........├ index.cgi --- 705.755
...........├ master.cgi --- 705,755
...........├ search.cgi --- 705,755
...........├ start.shtml --- 644
...........└ temp.cgi --- 705,755

となっています([ ]はディレクトリです。横にある数字はプログラムした方推奨のパーミッションです。ちなみにわたしはとりあえず、すべて755にしています。)

このauctディレクトリにあるindex.cgiにアクセスしたらstart.shtmlが開くという設定なのですが、なにか問題があるでしょうか。よろしくお願いいたします。

お礼日時:2005/03/29 11:13

#1です。



くどくてすみません、他のplファイルとかもasciiモードで転送されているか、ご確認下さい。

次に、切り分けのために、index.cgiとは別にtest.cgiとかをアップして、print "hello,world\n"とかを表示させて見てはいかがでしょう。
これが表示できれば、apacheのExecCGIは問題ない事がわかりますよね。

それが問題ないとして、index.cgiから呼ばれるstart.shtmlのかわりに、test.htmlとかにして、呼び出しのところが問題ないか、確認。
それがOKだとすると、index.cgiまではOKだという事がわかると思います。

となるとstart.shtmlが怪しくて、もしそれがSSIでしたら、エラーはそこで出ている可能性が高くなります。

ディレクトリのOptionsにIncludesがないとか、apacheの以下のパースがコメントアウトされたままとか・・。
AddType text/html .shtml
AddHandler server-parsed .shtml
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

転送方法ですが、plファイルなどに限らずバイナリもasciiで転送してみたりしたのですがだめでした。

あと、ご指示いただいた通りtest.cgiの動作テストしたところ、動作いたしませんでした。

詳細はまずデフォルトの状態でtest.cgiをcgi-binにおいてアクセスした結果
500internal server error
となりエラーログは
premature end of script headers: test.cgi
となりました。

次に #addhandler cgi-script .cgi をコメントにして
<directory "var/www/html">のoptinsにExecCGIを追加してlocalhost/test.cgiとアクセスしますと、こちらも500internal server errorとなり、
エラーログは no such file or directory :execof 'var/www/html/test.cgi' failed
と premature end of script headers: test.cgi
となりました。

最後に最初の質問でしました、scriptaliasをaliasに変えるのをtest.cgiでやってみましたところ、500internal server errorとなり、エラーログは
no such file or directory :execof 'var/www/html/test.cgi' failed
と premature end of script headers: test.cgi
でした。

これはExecCGIが問題あるということなのでしょうか。

正直かなり調べたのですが、まったく事態が好転いたしません。いったい何が問題なのでしょうか?サーバー機に問題がある場合なども考えられるのでしょうか?どうかご助力お願いいたします。

お礼日時:2005/03/29 17:14

>scriptalias /cgi-bin/ "/var/www/cgi-bin/"を


>       ↓
>alias /cgi-bin/ "/var/www/cgi-bin/"と変え(#は外しています)、

ここは変更しなくともいいのでは?
それに、「scriptalias /cgi-bin/ "/var/www/cgi-bin/"」という設定をしてあるのなら、

><Directory "/var/www/cgi-bin">
>のoptionsをnoneからExecCGIにしました。

という事をする必要はありません。


>premature end of script headers: index.cgi

スクリプト側の問題ですね。


ところで、その転送したファイルの改行はCR(\r)+LF(\n)ですか?それともLF(\n)ですか?

もし、改行がCR(\r)+LF(\n)なら、LF(\n)に変えてから実行してみたらどうなりますか?

viでスクリプトファイルを開いた場合、以下のような場合、改行はCR+LFです。
-------8<-------8<-------8<-------
#!/usr/bin/perl^M ←この「^M(CR)」
-------8<-------8<-------8<-------

もしくは、以下の様なコマンドイメージを実行して「\r\n」があるなら改行がCR+LFになってます。

-------8<-------8<-------8<-------
# head -1 index.cgi | od -cx
0000000 # ! / u s r / b i n / p e r l \r ←この「\r(CR)」
2123 752f 7273 622f 6e69 702f 7265 0d6c
0000020 \n \0
000a
0000021
-------8<-------8<-------8<-------

もしそうならば、nkfコマンドがおそらくインストールされているはずなので、それで改行をCR+LFからLFに変更してください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
ご指示いただいたとおり改行コードをcgiのソースを開いて確認してみましたが、\nというものだけで、\rというものは見当たりませんでした。

また、付け加えさせていただきますが、httpd.confの設定が <directory "/var/www/html">のoptionsにExecCGIを追加。#addhandler cgi-script .cgi のコメント化。そのほかはデフォルトという状態で、簡単なCGIファイルを作りvar/www/htmlで動作させたところ正常に動作いたしました。

同じ環境でindex.cgiのほうはエラーが出るということはご指摘の通りスクリプト側の問題と見てよろしいのでしょうか?ご指導お願いいたします。

お礼日時:2005/03/30 09:52

#1,2です。



2つ確認なのですが、test.cgiは
-----------------------
#!/usr/bin/perl

print "Content-type: text/html\n\n" ;
print "hello\n<br>" ;
-----------------------
みたいな感じでしょうか。

あとvar/www/htmlですが、
/var/www/html
の事ですよね?

-----------------------
次に #addhandler cgi-script .cgi をコメントにして
<directory "var/www/html">のoptinsにExecCGIを追加してlocalhost/test.cgiとアクセスしますと、こちらも500internal server errorとなり、
エラーログは no such file or directory :execof 'var/www/html/test.cgi' failed
と premature end of script headers: test.cgi
となりました。
-----------------------
これについては、
#addhandler cgi-script .cgi
の#があるとダメだと思います。コメントを外して再度試して下さい。

私もFC1で似たような環境を作成して試しまたが、test.cgiまでは問題なく稼働します。
    • good
    • 0
この回答へのお礼

お忙しい中たびたびのご回答感謝いたします!
作成しました.cgiは

#!/usr/bin/perl

print "content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
print "これが見えたら大丈夫\n";
print "</body>\n";
print "</html>\n";

というものです。

あと、すみません仰るとおりです、var/www/html/ではなく, /var/www/html/でした。

加えてこちらも私の書き間違いなのですが、#addhandler cgi-script .cgi をコメントにしたではなく、コメントをはずしたの間違いでした。

こちらのミスで無駄な手間をおかけしてしまいましてすみませんでした。

現在とりあえずtest.cgiが動いたということでどうも私が動かそうとしているscriptがあやしいというアドバイスをいただいたので、そちらのほうからpremature end of script headersについての解決法をgoogleで調べているのですが、なかなかうまくいきません。

また何かご指示いただけることがございましたらよろしくお願いします。

お礼日時:2005/03/30 11:53

動作させようとしているCGIはどこかで公開されているものなのでしょうか?


もし、そうならば、ちょっとこちらの環境で試してみたいので出来ればURLを、URLの提示が不可能ならその場所が特定出来そうな情報を頂けませんでしょうか?
    • good
    • 0
この回答へのお礼

是非お願いいたします!!

フリーのCGIではないので私の持っている正式版ではなく体験版の方になりますが、よろしいでしょうか?私は自宅サーバーでやっているのですが体験版の方も同じエラーが出ます。よろしくお願いいたします。

http://www.perldeco.net/trial/auction_pro.shtml

お礼日時:2005/03/30 12:25

#1,2,4です。



-----------------
また、付け加えさせていただきますが、httpd.confの設定が <directory "/var/www/html">のoptionsにExecCGIを追加。#addhandler cgi-script .cgi のコメント化。そのほかはデフォルトという状態で、簡単なCGIファイルを作りvar/www/htmlで動作させたところ正常に動作いたしました。
-----------------

> #addhandler cgi-script .cgi のコメント化
はコメント外しですよね?

それで、この状態で次のステップに進んではいかがでしょう。
/home/www/cgi-bin
を/cgi-bin/にaliasしますよね。

この際に、ScriptAliasのところを修正するのではなく、Alias文を新規につくりましょう。
場所は
Alias /icons/ "/opt/apache/icons/"
があるあたりでいいと思います。
<IfModule mod_alias.c>の後ですね。

さらに
<Directory "/home/www/cgi-bin">
にExecCGIを追加。

これでapacheをリスタート、test.cgiを/home/www/cgi-binにおいて、稼働確認。
うまく行くはずですから、今度はindex.cgiを試してはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。 

ご指示いただいた設定をしてみました、が、index.cgiの方は動きません・・・。test.cgiは動きますので、やはりscriptの問題なんでしょうか?
よろしくお願いいたします。

お礼日時:2005/03/30 13:31

体験版(auction_pro_try.zip)のほうで確認してみました。



環境
 Fedora Core 3(VMware上に新規インストール)
 httpd(Apache) httpd.confはデフォルトから「AddHandler cgi-script .cgi」を有効にしただけ。

-------8<-------8<-------8<------8<------
※auction_pro_try.zipをFC3上に転送

# unzip auction_pro_try.zip
# cd auction_pro_try
# mv auction_pro /var/www/cgi-bin
# cd /var/www/cgi-bin/auction_pro
# chmod +x *.cgi

この状態で
http://localhost/cgi-bin/auction_pro/search.cgi
にアクセスすると「premature end of script headers」。

元々のファイルは漢字コード S-JIS、改行コード CR+LFのようなので以下のシェルを作成し改行コードを CR+LF から LF に変換。

# cat NKF.sh
TMPFILE=/tmp/NKF.$$

for FILE in `find . -name "*.cgi" -o -name "*.pl"`
do
echo ${FILE}
nkf -S -s -Lu ${FILE} > ${TMPFILE}
cp ${TMPFILE} ${FILE}
done

rm -f ${TMPFILE}
# bash ./NKF.sh

この状態で
http://localhost/cgi-bin/auction_pro/search.cgi
にアクセスすると「premature end of script headers」にならず正常に表示されます。
-------8<-------8<-------8<------8<------

No.3で書いたようどこかで改行コードを変換していないなら、改行コードがCR+LFのままになっていてそのせいで「premature end of script headers」になっているような気がするんですが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
仰るとおりでした!EUCとLFに変換したところ
見事CGIが動作しました。

本当に何十時間悪戦苦闘したか分かりません。
その状況から抜け出すことができたのは、Leanさん
のおかげです。
本当になんとお礼の言葉を言っていいか分かりません。
まだ、文字化けしてたり、グローバルからアクセスしたら、真っ白な画面が表示されてしまってたりと、
多々問題はありますが、とにかく今は感謝の気持ちで一杯です!
残念ながら私には20ポイントしか、お渡しする権利はありませんが、本当にそんなものとは比較にならないほど感謝の気持ちです。本当にありがとうございました。

お礼日時:2005/04/01 04:06

#1,2,4,6です。



#7様と同じく体験版のうち、search.cgiを試してみました。

zipファイルをFedoraに持っていって、そこで解凍したものはやはり
premature end of script headers
になりますね。

WINDOWSでの+lhacaで解凍し、ffftp1.92のASCIIモードでアップしたものは稼働しました。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
改行コードの問題だったようです。

このたびはどれだけ助けていただいたか分かりません!Leanさん同様10gateさんの助けなしでは間違いなく解決には至らなかったはずです。

私の勉強不足と力不足のせいで、たくさんのお手間をかけさせてしまいましたことをお詫びするとともに、このたびは本当に本当にありがとうございました!

お礼日時:2005/04/01 04:16

NO.8 10gate様


>WINDOWSでの+lhacaで解凍し、ffftp1.92のASCIIモードでアップしたものは稼働しました。

FFFTPではASCIIモードで転送する際、改行コードをホスト側に合わせた改行コードに変更してくれるようですね。
そこで改行コードをCR+LF(Windows)からLF(UNIX)にしてくれるのでしょうね。

質問の方がどのFTPクライアントを使用しているのかわかりませんが、Windowsからファイル転送をしていてFFFTP以外のFTPクライアントを使用しているならFFFTPを試してみてはどうでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございました!

お礼日時:2005/04/01 04:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!