• ベストアンサー

すみません、二度目です。fedora core3でcgiが動きません。

すみません、以前も質問したのですが、残念ながら解決に至らなかったので ここでまた質問させていただきました。お詳しい方のアドバイスをよろしくお願い致します。 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ではうまくいかないのは どうしてでしょうか?アドバイスお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.9

NO.8 10gate様 >WINDOWSでの+lhacaで解凍し、ffftp1.92のASCIIモードでアップしたものは稼働しました。 FFFTPではASCIIモードで転送する際、改行コードをホスト側に合わせた改行コードに変更してくれるようですね。 そこで改行コードをCR+LF(Windows)からLF(UNIX)にしてくれるのでしょうね。 質問の方がどのFTPクライアントを使用しているのかわかりませんが、Windowsからファイル転送をしていてFFFTP以外のFTPクライアントを使用しているならFFFTPを試してみてはどうでしょうか?

yukiz
質問者

お礼

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

その他の回答 (8)

  • 10gate
  • ベストアンサー率42% (50/117)
回答No.8

#1,2,4,6です。 #7様と同じく体験版のうち、search.cgiを試してみました。 zipファイルをFedoraに持っていって、そこで解凍したものはやはり premature end of script headers になりますね。 WINDOWSでの+lhacaで解凍し、ffftp1.92のASCIIモードでアップしたものは稼働しました。

yukiz
質問者

お礼

ご回答ありがとうございます! 改行コードの問題だったようです。 このたびはどれだけ助けていただいたか分かりません!Leanさん同様10gateさんの助けなしでは間違いなく解決には至らなかったはずです。 私の勉強不足と力不足のせいで、たくさんのお手間をかけさせてしまいましたことをお詫びするとともに、このたびは本当に本当にありがとうございました!

  • Lean
  • ベストアンサー率72% (435/603)
回答No.7

体験版(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」になっているような気がするんですが。

yukiz
質問者

お礼

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

  • 10gate
  • ベストアンサー率42% (50/117)
回答No.6

#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を試してはいかがでしょうか。

yukiz
質問者

お礼

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

  • Lean
  • ベストアンサー率72% (435/603)
回答No.5

動作させようとしているCGIはどこかで公開されているものなのでしょうか? もし、そうならば、ちょっとこちらの環境で試してみたいので出来ればURLを、URLの提示が不可能ならその場所が特定出来そうな情報を頂けませんでしょうか?

yukiz
質問者

お礼

是非お願いいたします!! フリーのCGIではないので私の持っている正式版ではなく体験版の方になりますが、よろしいでしょうか?私は自宅サーバーでやっているのですが体験版の方も同じエラーが出ます。よろしくお願いいたします。 http://www.perldeco.net/trial/auction_pro.shtml

  • 10gate
  • ベストアンサー率42% (50/117)
回答No.4

#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までは問題なく稼働します。

yukiz
質問者

お礼

お忙しい中たびたびのご回答感謝いたします! 作成しました.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で調べているのですが、なかなかうまくいきません。 また何かご指示いただけることがございましたらよろしくお願いします。

  • Lean
  • ベストアンサー率72% (435/603)
回答No.3

>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に変更してください。

yukiz
質問者

お礼

ご回答ありがとうございます! ご指示いただいたとおり改行コードをcgiのソースを開いて確認してみましたが、\nというものだけで、\rというものは見当たりませんでした。 また、付け加えさせていただきますが、httpd.confの設定が <directory "/var/www/html">のoptionsにExecCGIを追加。#addhandler cgi-script .cgi のコメント化。そのほかはデフォルトという状態で、簡単なCGIファイルを作りvar/www/htmlで動作させたところ正常に動作いたしました。 同じ環境でindex.cgiのほうはエラーが出るということはご指摘の通りスクリプト側の問題と見てよろしいのでしょうか?ご指導お願いいたします。

  • 10gate
  • ベストアンサー率42% (50/117)
回答No.2

#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

yukiz
質問者

お礼

ご回答ありがとうございます。 転送方法ですが、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が問題あるということなのでしょうか。 正直かなり調べたのですが、まったく事態が好転いたしません。いったい何が問題なのでしょうか?サーバー機に問題がある場合なども考えられるのでしょうか?どうかご助力お願いいたします。

  • 10gate
  • ベストアンサー率42% (50/117)
回答No.1

こんにちは。 > 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" ;

yukiz
質問者

お礼

回答ありがとうございます! 説明不足ですみませんでした。 転送モードは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が開くという設定なのですが、なにか問題があるでしょうか。よろしくお願いいたします。

関連するQ&A