はじめての自宅サーバ構築 - Fedora/CentOS -
Last Update 2018/05/30
[ 更新履歴 ] [ サイト マップ ] [ 質問掲示板 ] [ 雑談掲示板 ] [ リンク ]
トップ >> 質問掲示板

 このスレッドはクローズされています。記事の閲覧のみとなります。

 cgiの実行について
日時: 2006/10/09 22:12
名前: 智樹

①不明点・障害内容:作成したHPの動作を確認する為、自宅でサーバーを立てたのですが、
          cgiが動作しません。cgiの内容が表示されるのみで、実行はされません。
②ログの有無   :
  (有:その内容):無
③Distribution  :Fedoracore3
      Version:
④Service Name  :httpd
      Version:Perl

書籍を購入したりHPで調べたのですが、どこの設定が間違っているのかよくわからず困っております。
素人で、大変申し訳ありませんが、ご教授の程宜しくお願いいたします。

(ユーザAの場合)
http://xxx.xxx.xxx.xxx/~userA/cgi-bin/???.cgi

-------------------------
環境:FedoraCore3
Apache 2.0.52.3
Perl 5.8.5(/usr/bin/perl)
-------------------------

---------------------------------------------------
<httpd.conf> 
#UserDir disable
UserDir public_html

alias /cgi-bin/ "/home/*/public_html/cgi-bin/"
<Directory "/home/*/public_html/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

#AddHandler cgi-script .cgi 
--------------------------------------------------

メンテ

Page:  [1] [2] [3]

■ コンテンツ関連情報

 Re: cgiの実行について ( No.6 )
日時: 2006/10/10 19:02
名前: 管理者

> 以下のcgiをWindows上のサクラエディタで作成し、UTF-8,改行コード(LF)で保存しアップしましたが、
> Internal Server Errorになります。cgiファイルのパーミッションは、念のため755にしてあります。

アップロードは、取り合えずバイナリモードで行われましたか?


上記以外の確認で、コマンドラインより以下を実行してみて下さい。

# /usr/bin/perl /home/userA/public_html/cgi-bin/test.cgi

上記での出力はどの様になりますか?

ちなみに、UTF-8で作成した「test.cgi」であれば以下を変更してください。

print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">";
                 ↓
print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">";
メンテ
 Re: cgiの実行について ( No.7 )
日時: 2006/10/10 20:29
名前: 智樹

管理人様ありがとうございます。

>アップロードは、取り合えずバイナリモードで行われましたか?

はい。FFFTPのデフォルト設定で,拡張子にcgiがつくものは、自動でバイナリーモードに切り替えてアップするようになっていましたが、自動切換モードではなく、バイナリモードを選択してサーバーにアップしました。
(METAタグのcharsetは、サーバーにあわせてUTF-8に変更しました。)

1.# /usr/bin/perl /home/userA/public_html/cgi-bin/test.cgiを実行すると、cgiファイルの中身が表示され、cgiは実行されませんでした。(test.cgiのパーミッション755)

2.http://xxx.xxx.xxx.xxx/~userA/cgi-bin/test.cgiを実行すると、cgiは実行されます。

3.また、hello.cgiというcgiファイルを作成して、http://xxx.xxx.xxx.xxx/~userA/cgi-bin/hello.cgiを実行してみましたところ、Internal Server Errorになりました。
しかし、# /usr/bin/perl /home/userA/public_html/cgi-bin/hello.cgiを実行すると、cgiは実行されます。
(hello.cgiのパーミッション755)
 -------------------------
 #!/usr/bin/perl
 print "Hello World";
 -------------------------

たびたび、申し訳ありませんがどうぞ宜しくお願いいたします。
メンテ
 Re: cgiの実行について ( No.8 )
日時: 2006/10/10 21:07
名前: 管理者

> 1.# /usr/bin/perl /home/userA/public_html/cgi-bin/test.cgiを実行すると、cgiファイルの中身が表示され、cgiは実行されませんでした。(test.cgiのパーミッション755)
「ファイルの中身が表示され・・・」は以下の様に表示されましたか?

# /usr/bin/perl /home/userA/public_html/cgi-bin/test.cgi
Content-type: text/html

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP"><title>テストページ</title>
</head>
<body>
CGI表示テスト
</body>
</html>

上記であれば問題ありません。

ちなみに以下の結果を教えてください。

# kcc -c /home/userA/public_html/cgi-bin/test.cgi

> 2.http://xxx.xxx.xxx.xxx/~userA/cgi-bin/test.cgiを実行すると、cgiは実行されます。
上記は実行されるが「Internal Server Error」となってしまう。で宜しいのですよね?

> 3.また、hello.cgiというcgiファイルを作成して、http://xxx.xxx.xxx.xxx/~userA/cgi-bin/hello.cgiを実行してみましたところ、Internal Server Errorになりました。
> しかし、# /usr/bin/perl /home/userA/public_html/cgi-bin/hello.cgiを実行すると、cgiは実行されます。
> (hello.cgiのパーミッション755)
> -------------------------
> #!/usr/bin/perl
> print "Hello World";
> -------------------------


上記のスクリプトでWebブラウズしても、ブラウザが「Content-type」を認識できないのでエラーとなります。

----------
①以下の結果を教えてください。

# cat -v /home/userA/public_html/cgi-bin/test.cgi

②「/etc/httpd/conf/httpd.conf」のユーザ公開ディレクティブ部分(以下の部分)
<IfModule mod_userdir.c>
    :
</IfModule>

<Directory /home/*/public_html>
    :
</Directory>


③「/etc/httpd/conf/httpd.conf」内の以下の部分
AddType text/html ・・・・
AddHandler cgi-script ・・・・
メンテ
 Re: cgiの実行について ( No.9 )
日時: 2006/10/10 21:40
名前: 智樹

管理人様ありがとうごいざます。

test.cgiは、ブラウザのアドレス欄にアドレスを入力すると、cgiは実行され、きちんと表示されます。
しかし、# /usr/bin/perlで実行するとcgiファイルの中身が表示されます。 
hello.cgiは、その逆で、、# /usr/bin/perlで実行すると、cgiは実行されます。しかし、ブラウザのアドレス欄にアドレスを入れると、internal Server Errorになります。


-------------------------------------------------------------------------------------------
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
print "<title>M-cM-^CM-^FM-cM-^BM-9M-cM-^CM-^HM-cM-^CM-^ZM-cM-^CM-<M-cM-^BM-8</title>\n";
print "</head>\n";
print "<body>\n";
--------------------------------------------------------------------------------------------


-------------------------------------------------------------------------
<IfModule mod_userdir.c>
  #UserDir disable
  UserDir public_html
</IfModule>
----------------------------------------------------------------------


----------------------------------------------------------------------
AddHandler cgi-script .cgi .pl
#AddHandler send-as-is asis
ddHandler imap-file map
AddHandler type-map var
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
------------------------------------------------------------------------

申し訳ありませんが宜しくお願いいたします。

メンテ
 Re: cgiの実行について ( No.10 )
日時: 2006/10/10 21:58
名前: 管理者

> test.cgiは、ブラウザのアドレス欄にアドレスを入力すると、cgiは実行され、きちんと表示されます。
> しかし、# /usr/bin/perlで実行するとcgiファイルの中身が表示されます。
> hello.cgiは、その逆で、、# /usr/bin/perlで実行すると、cgiは実行されます。しかし、ブラウザのアドレス欄にアドレスを入れると、internal Server Errorになります。

と言う事は、「test.cgi」はOKと言うことで良いと思います。

> しかし、# /usr/bin/perlで実行するとcgiファイルの中身が表示されます。
先程の当方のレスで記述しましたが、ファイルの中身(print文)が表示されるのが正解です。

「hello.cgi」も前述しましたが、「Content-type」を認識できないのが理由です。
------ hello.cgi ------
#!/usr/bin/perl
print "Hello World";
-----------------------

上記をブラウザで表示させたければ、「Content-type」を最初に出力してください。(以下の様に・・)

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
print "Hello World";
print "</body>\n";
print "</html>\n";
メンテ

Page:  [1] [2] [3]

■ その他

ページ先頭へ

Copyright(©)2004-2018 First home server construction. All Right Reserved.