Linux で自宅サーバ [ Home Server Techncial ]

>>トップページに戻る

BBS 過去ログ No.0009に戻る

タイトル: CGI動作しないようです
記事No: 2607
投稿日: 2004/08/19(Thu) 00:21
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
本サイトを参考にカウンタ(CGI)を設置したのですが、動作しないようです。e-カウンタというカウンタですが。
OSはvine2.6です。
エラーログを見ると
options ExecCGI is off in this directoryとでています。
構成は
public_html / index.html
|
|
+--cgi-bin / ecount.cgi   ecount.dat
       |
      |
     +--gif /0.gif 1.gif・・・9.gif
       |
     +--lock /
となっています。
httpd.confについてもHPの記載どおりになっていることを確認しました。
ユーザは/~usernameで分けており。そのユーザーのディレクトリ中にpublic_htmlとcgi-binを作ってあります。 
以上判断材料不足かと思いますがお教えください。

タイトル: Re: CGI動作しないようです
記事No: 2610
投稿日: 2004/08/19(Thu) 08:39
投稿者: masapapa URL: http://masashi.zive.net:8080/
ノーマルの状態で設置カウンタ表示用画像をcgi-bin内に置くのではなく、publin_htmlに設置し、使用するcgi内で画像ディレクトリを指定すれば解決できると思いますよ。httpd.confで設定する方法もありますが・・・
public_html/index.html
|
|
+ gif /0.gif 1.gif・・・9.gif


タイトル: Re: CGI動作しないようです
記事No: 2612
投稿日: 2004/08/19(Thu) 14:50
投稿者: 吉々
もし、ディレクトリ構造をそのまま使いたいのでしたら
>ユーザは/~usernameで分けており。
恐らく.htaccessを有効にしていると思いますので、
AddHandler default-handler gif jpg png
の一文を追加してあげれば、gif、jpg、pngがcgi-binディレクトリ内で
画像として認識できます。

タイトル: Re^2: CGI動作しないようです
記事No: 2613
投稿日: 2004/08/19(Thu) 14:57
投稿者: 吉々
あ、「options ExecCGI is off in this directory」って、
「CGIとしては認識できているが、そのディレクトリではCGIが実行できる環境になってい」って意味みたいですね・・・
cgi-binディレクトリ内の.htaccessファイル、もしくはhttpd.confの<IfModule mod_userdir.c>のところの記述は正しくできてますか?

タイトル: Re^2: CGI動作しないようです
記事No: 2614
投稿日: 2004/08/19(Thu) 17:57
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
ありがとうございます。参考にして一度見てみます。
あれから少し間違いを見つけなおしたところ。下記のようなエラーログが出力されました。特にcgiのヘッダー等おかしいところがないと思うのですが。
[Thu Aug 19 17:42:08 2004] [error] [client 61.213.69.123] request failed: erroneous characters after protocol string: GET /~cop/cgi-bin ecount.cgi?4 HTTP/1.0
[Thu Aug 19 17:42:08 2004] [error] (8)Exec format error: exec of /home/cop/public_html//cgi-bin/ecount.cgi failed
[Thu Aug 19 17:42:08 2004] [error] (8)Exec format error: exec of /home/cop/public_html//cgi-bin/ecount.cgi failed
[Thu Aug 19 17:42:08 2004] [error] (8)Exec format error: exec of /home/cop/public_html//cgi-bin/ecount.cgi failed
[Thu Aug 19 17:42:08 2004] [error] [client 61.213.69.123] Premature end of script headers: /home/cop/public_html//cgi-bin/ecount.cgi
[Thu Aug 19 17:42:08 2004] [error] [client 61.213.69.123] Premature end of script headers: /home/cop/public_html//cgi-bin/ecount.cgi
[Thu Aug 19 17:42:08 2004] [error] [client 61.213.69.123] Premature end of script headers: /home/cop/public_html//cgi-bin/ecount.cgi

タイトル: Re^3: CGI動作しないようです
記事No: 2615
投稿日: 2004/08/19(Thu) 18:04
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
追伸
吉々さんのご指摘の通り、httpd.confの記述で漏れがありましたのでそこは直しました。そうしたところ上記エラーに変わりました。

タイトル: 再び追伸
記事No: 2616
投稿日: 2004/08/19(Thu) 18:23
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
ふたたび追伸
ここは、おかしかったので直していました。
ちなみに
"/home/*/public_html"としています。どうでしょうか?

タイトル: Re^3: CGI動作しないようです
記事No: 2617
投稿日: 2004/08/19(Thu) 19:45
投稿者: 吉々
私も始めてまだ日数が浅いので、エラーの解釈等間違ってるとは思いますが。。
経験上同じことをやってるので、その時の対処を^^;

>request failed
以下2つのエラーをひっくるめて、cgiがエラーを起こして処理を完了できなかった、ということっぽいです。
下のエラーを潰せば出てこなくなると思います。

>Exec format error
perlのパス定義部分が不正な時に出るエラーです。
最初の行、「#! /usr/local/bin/perl」となっているのなら、「#! /usr/bin/perl」にしてみるか、/usr/local/bin/ディレクトリに「perl」という名前でシンボリックリンクが作成してあるか確認してみてください。
(おすすめはシンボリックリンク作成です。大概の配布cgiは「#! /usr/local/bin/perl」ですし、どちらも対処できるようになります)

>Premature end of script headers
これは、色々な要因があるので一概には言えませんが、スクリプト構文のミス?みたいな感じでしょうか。。
「Exec format error」と一緒に出るケースがあるみたいです。
perlのパス定義を直せば出てこなくなるかと思いますが、
まれに、FTP転送時に改行コードの誤認識が起きた際等に発生します。
perlのパス定義で直らない場合は
「#! /usr/local/bin/perl --」のようにパス定義の後に半角スペース、マイナス2つを入れてみてください。

>"/home/*/public_html"としています。
というのは、UserDirの定義でしょうか?だとしたら
「UserDir "/home/*/public_html/"」のようにディレクトリの最後にスラッシュを入れておいた方がいいと思います。

タイトル: 修正しましたが・・・。
記事No: 2618
投稿日: 2004/08/19(Thu) 20:09
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
お教えいただいた3点中2点できていました。perlのパスはvineの場合usr/bin/perlですのでそれは最初に直していました。ただ、念のため(意味ないかもしれませんが)シンボルリンクを作成し、usr/local/binに置いておきました。それと、パス定義の後にマイナス2つ入れました。まだ、同じエラーが出ますね。

タイトル: Re: 修正しましたが・・・。
記事No: 2619
投稿日: 2004/08/19(Thu) 20:42
投稿者: 吉々
あ、画像の処理の方は済んでますか?
masapapaさんが示した方法か、.htaccessにハンドラを追加して、みてください。

あと、ディレクトリ構造ですけど
「/home/~cop/public_html/」というディレクトリと
「/home/~cop/public_html/cgi-bin/」という解釈でいいんですよね?
差し支えなければ念のため、
.htaccessファイル、httpd.confの<IfModule mod_userdir.c>の内容を書き出して頂けますか?

タイトル: これです
記事No: 2621
投稿日: 2004/08/19(Thu) 21:24
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
ディレクトリ構造それでOKです。
では下に記述します。
まずhttpd.conf
<IfModule mod_userdir.c>
UserDir "/home/*/public_html/"
<Directory /home/*/public_html/cgi-bin>
AllowOverride All
</Directory>
</IfModule>
#
# DirectoryIndex: Name of the file or files to use as a pre-written HTML
# directory index. Separate multiple entries with spaces.
#
DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.cgi

#
# AccessFileName: The name of the file to look for in each directory
# for access control information.
#
AccessFileName .htaccess

#
# The following lines prevent .htaccess files from being viewed by
# Web clients. Since .htaccess files often contain authorization
# information, access is disallowed for security reasons. Comment
# these lines out if you want Web visitors to see the contents of
# .htaccess files. If you change the AccessFileName directive above,
# be sure to make the corresponding changes here.
#
# Also, folks tend to use names such as .htpasswd for password
# files, so this will protect those as well.
#
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
次.htaccessです。

Options ExecCGI
AddType text/html.cgi
AddHandler cgi-script.cgi
AddHandle default-handler gif jpg png


Options IncludesNoExec
AddType text/html.shtml
AddHandler server-parsed.shtml
以上です。よろしくお願いします。

タイトル: Re: これです
記事No: 2622
投稿日: 2004/08/19(Thu) 23:34
投稿者: 吉々
とりあえず気になったところだけ。

> AddType text/html.cgi
text/htmlと.cgiの間に半角スペースを

> AddHandler cgi-script.cgi
cgi-scriptと.cgiの間に同じく半角スペースを

> AddHandle default-handler gif jpg png
AddHandleではなくAddHandlerです

>Options IncludesNoExec
一行目で「Options ExecCGI」としてるのですから、ここで指定してしまうと上の「ExecCGI」が無効になってしまうかと。。
一行目で「Options IncludesNoExec ExecCGI」としてみてください。

> AddType text/html.shtml
> AddHandler server-parsed.shtml
こちらも同様に.shtmlの前に半角スペースを入れた方がいいと思います。

半角スペースはどうでもいいことだとは思いますけど、AddHandlerのスペルミスと、特に「Options」の定義が怪しいですね。

タイトル: 修正しました
記事No: 2624
投稿日: 2004/08/20(Fri) 09:18
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
修正しました。エラーログには同様のエラーが出ます。カウンタcgiのダウンロードはwindowsマシンで行い。linuxに移したのですが、そのあたりは関係ないですかね。

タイトル: 追加
記事No: 2625
投稿日: 2004/08/20(Fri) 09:39
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
cgiのディレクトリにcdで行って、ecounet.cgiを実行してみました。すると下記のエラーが出ました。
./ecoount.cgi:line1:syntax error near unexpected token'Transitional//EN">
./ecount.cgi:line1:<!DOCTYPE html PUBLIC"-//w3c//DTD HTML 4.01 Transitional//EN">'
特に1行目おかしな記述をしていると思いません。perlのパスがあって半角スペース--です。

タイトル: CGI自体は動作するようです
記事No: 2626
投稿日: 2004/08/20(Fri) 11:58
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
簡単なCGIプログラムをいれ実行したら動作しました。
と言うことは、やはりCGIプログラムの記述ミスのようですね。
前述のsyntaxerrerあたりが臭いですがそこがわかりませんね。

タイトル: Re: CGI自体は動作するようです
記事No: 2627
投稿日: 2004/08/20(Fri) 12:54
投稿者: みのる   <rabbit@tibbar.dip.jp>
URL: http://tibbar.dip.jp/~rabbit/
Windowsの改行コードのかけらが残っていたりしませんか?
「cat -v CGIファイル」で改行位置に ^M が表示されると正常動作を
しない可能性があります。

FTPサーバがVSFTPDの場合、設定によってはFFFTPなどのクライアン
トソフト側でASCII転送設定にしていてもBINARY転送になってしま
い、改行コードが変更されないまま転送される場合があります。

タイトル: Re^2: CGI自体は動作するようです
記事No: 2628
投稿日: 2004/08/20(Fri) 14:32
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
おっしゃるとおりでした。^Mかなり残っています。
解決策ご存知でしょうか?確かにFFFTPを使いその設定にしていたと思います。

タイトル: Re^3: CGI自体は動作するようです
記事No: 2629
投稿日: 2004/08/20(Fri) 15:42
投稿者: みのる   <rabbit@tibbar.dip.jp>
URL: http://tibbar.dip.jp/~rabbit/
単純にそのファイルだけを直すのなら、emacsなどの文字コードと
改行コードが指定できるエディタで保存し直すのが早いです。

もしも、FedoraCoreやRedHatLinuxなどをお使いでFTPサーバとして
VSFTPが導入されているのなら設定の変更でASCII転送ができるよう
になります。

VSFTPの設定ファイル vsftpd.confに以下の記述をします。

ascii_upload_enable=YES
ascii_download_enable=YES

設定ファイルはFedoraCore1の場合は/etc/vsftpd/vsftpd.confにあ
りました。上記設定は81行目と82行目に #でコメントアウトした状
態で記述してあるので行頭の #を削除するだけで設定できます。

タイトル: Re^4: CGI自体は動作するようです
記事No: 2631
投稿日: 2004/08/20(Fri) 18:53
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
vineなのでvsftpはないようです。ただ、emacsはあります。
それが、情けない話ですが、emacsをどう使って編集するのかがわからないのです。fileでecount.cgiを開けようとしても、うんともすんともならないのです。おそらくこれが出来れば解決すると思います。解説も取っ掛かりが無くよく理解が出来ません。多分取っ掛かりだけでもわかれば出来るように思うのですが。上記のようにオープンファイルでパスを指定しecount.cgiを指定してもだめです。取っ掛かりだけでもお教えいただけませんか。平行して解説を再度読んで試してみますが。

タイトル: nkfコマンドではどうでしょう
記事No: 2633
投稿日: 2004/08/20(Fri) 20:26
投稿者: みのる URL: http://tibbar.dip.jp/~rabbit/
ちょっとLinux環境の無い所からの書き込みなので自信がないのですが、以下のコマンドではどうでしょう。

nkf -e -Lu ecount.cgi > ecount-Lu.cgi
cp ecount-Lu.cgi ecount.cgi
最初に変換したecount-Lu.cgiファイルを作って、次にecount.cgiファイルに上書きをします。

または
nkf -e -Lu -OW ecount.cgi
↑こっちは自信無し。

タイトル: emacsわかりました
記事No: 2635
投稿日: 2004/08/20(Fri) 21:22
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
emacsわかりました。linuxのほうですが、ただし、^Mの消し方が判りません。ecount.cgiのファイルは開くのですが、そのまま出てきてしまいます。ですから、^Mが現れないわけで消すことが出来ないのです。windows でもインストールしこれをあけると^Mがでてきました。それを消してlinuxのサーバへ送ると^Mがまだあるのです。
エラーログも同じですね。
それから、今から最後に書き込んでいただいたことを次に試します。

タイトル: やってみました
記事No: 2636
投稿日: 2004/08/20(Fri) 21:35
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
やってみました。^M消えているようです。これでいけるはずと思いテストしました。まだ下記のログエラーが出ます。
[Fri Aug 20 21:26:23 2004] [error] [client 61.213.69.123] request failed: erroneous characters after protocol string: GET /~cop/cgi-bin ecount.cgi?4 HTTP/1.0
[Fri Aug 20 21:26:23 2004] [error] (8)Exec format error: exec of /home/cop/public_html//cgi-bin/ecount.cgi failed
[Fri Aug 20 21:26:23 2004] [error] [client 61.213.69.123] Premature end of script headers: /home/cop/public_html//cgi-bin/ecount.cgi
[Fri Aug 20 21:26:23 2004] [error] (8)Exec format error: exec of /home/cop/public_html//cgi-bin/ecount.cgi failed
[Fri Aug 20 21:26:23 2004] [error] [client 61.213.69.123] Premature end of script headers: /home/cop/public_html//cgi-bin/ecount.cgi
[Fri Aug 20 21:26:23 2004] [error] (8)Exec format error: exec of /home/cop/public_html//cgi-bin/ecount.cgi failed
[Fri Aug 20 21:26:23 2004] [error] [client 61.213.69.123] Premature end of script headers: /home/cop/public_html//cgi-bin/ecount.cgi
[Fri Aug 20 21:26:29 2004] [error] [client 220.12.28.59] File does not exist: /home/httpd/html/robots.txt
確かに改行コードがwindowsと異なるのでそれを修正というのは判りましてこれでOKと思ったのですが。お手上げですね。

タイトル: 文法チェックをしてみてください
記事No: 2638
投稿日: 2004/08/21(Sat) 00:19
投稿者: みのる URL: http://tibbar.dip.jp/~rabbit/
基本の基本を忘れてました。(^_^;)
設置してあるCGIスクリプトのディレクトリで
perl -cw ecount.cgi
とコマンド実行してみてください。
スクリプトファイル内に文法上のエラーがあれば表示されます。

多分なにかの作業で不必要な文字等が紛れ込んでしまっているような
気がします。(←経験談)

タイトル: Re: 文法チェックをしてみてください
記事No: 2639
投稿日: 2004/08/21(Sat) 08:57
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
ありがとうございます。やってみました。
syntax okと出ています。
それとnkf -eコマンドでコードの変換はしたのですが、もしかしたらこの手順が違っていたかも知れません。最初にwindows上でemacsを使い^Mを消した物をlinuxで処理しています。これをwindowsで何もしていない物をnkfを使ってコード変換したほうがいいのでしょうか?なんて言うか併用しないほうがいいのでしょうか?

タイトル: Re^2: 文法チェックをしてみてください
記事No: 2641
投稿日: 2004/08/21(Sat) 15:46
投稿者: みのる URL: http://tibbar.dip.jp/~rabbit/
> それとnkf -eコマンドでコードの変換はしたのですが、もしかしたらこの手順が違っていたかも知れません。最初にwindows上でemacsを使い^Mを消した物をlinuxで処理しています。これをwindowsで何もしていない物をnkfを使ってコード変換したほうがいいのでしょうか?なんて言うか併用しないほうがいいのでしょうか?

というよりも、FTPを立ち上げてWindowsクライアントからサーバに
アップロードする方法が良いんですけど。

ちょっと色々試してみました。
同様のエラー表示が出る物としては、
1、一行目の「#!/usr/bin/perl」の記述の前に全角または半角の
スペースが入ってしまっている場合。
2、「#!/usr/bin/perl」の前に改行されている場合。
3、「"」で挟まれた場所以外に全角スペースが使われいる場合。
などがありました。
これらの場合の中には「perl -cw」で起動してもsyntax errorが出ない物もありました。
どうも、スクリプトの記述ミスのような気がします。

タイトル: 文法チェックをしてみたんですけれど
記事No: 2647
投稿日: 2004/08/22(Sun) 18:32
投稿者: あきら URL: http://www.smasnet.com/~cop/index.html
一応自分なりに見てみたんですけれど。特にスペース改行ないようですね。

▲ページの最上部に戻る

Copyright© Home Server Technical. All Right Reserved.
webmaster@miloweb.net