- ベストアンサー
Apache2.0で「#exec」コマンドを許可したい
アクセスありがとうございます。 先日の私の質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=447488 は無事解決いたしました。 どのような原因だったのか知りたい方はその旨を、お書きください。 また今回も、よろしくお願いします。 CGIで簡単なアクセスカウンターを作成したのですが動作しません。 「index.html」の中に<!--#exec cmd="./counter.pl"-->のコマンドを記述しました。 「counter.pl」の内容は「counter.dat」にインクリメント後その結果を表示するというものです。 「Linux」のコマンドラインからの「counter.pl」のテストでは「syntax OK」でした。 またコマンドラインから「counter.pl」を実行すると実行回数分の数字が表示されます。 また「AddType text/x-server-parsed-html .html 」という内容の「.htaccess」ファイルを同じディレクトリ内に作成しました。 各ファイルのパーミッションは「index.html」と「.htaccess」が「rw-r--r--」で「counter.pl」が「rwxr-xr-x」で「counter.dat」が「rw-rw-rw-」です。 本来ならば、これでアクセスカウンターが作動するはずなのですが、なぜか動きません。 おそらく「httpd.conf」の内容を書き換えることにより動作するようになるのだと信じ、いろいろ変更してみましたが、うまくいかないので結局、今はデフォルト設定に戻しました。 また、このスクリプトは学校のサーバに置いた場合は問題なく動作します。 そこで学校の「httpd.conf」を、そのまま自宅サーバに適用したりもしましたが「Apache」のバージョンの違いか、またはその他の原因か「httpd」が起動しませんでした。 しかし、このファイル以外に原因は考えられません。 おそらくアクセスカウンターを動かすには「httpd.conf」の色々な箇所を変更する必要があるのだと思っているのですが、いったい、どこと、どこと、どこと、どこを、どのように書き換えればいいのですか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは、夜の個別指導係2です。 RedHat8+Apache2でSSIを動かしてみました。 astronautさんが書かれているように、httpd.confのコメントを読みながら修正したら あっけなくアクセスカウンタが動きました。 .htaccessは使っていません。 httpd.confで変更したところは以下のところ。 (1) <Directory /home/*/public_html> ..... Options ExecCGI Includes ..... </Directory> (2) AddDefaultCharset Off (3) AddHandler cgi-script .cgi (4) AddOutputFilter INCLUDES .html そして /home/hogehoge/public_htmlのindex.htmlの中は <html> <body> あなたは <!--#exec cmd="./counter.pl"--> 番目のお客様です。 最終更新日:<!--#echo var="LAST_MODIFIED"--> </body> </html> こんな感じでカウンタが実行できました。 ご参考まで。 ----------------------------------------------------------- counter.pl #!/usr/bin/perl $datafile = "counter.dat"; open(DATA, "$datafile"); $number = <DATA>; close(DATA); $number = $number + 1; open(DATA, ">$datafile"); print DATA $number; close(DATA); print $number;
その他の回答 (4)
- astronaut
- ベストアンサー率58% (303/516)
> これからもジャンジャン質問に参りますのでよろしくお願いします。 いいえ、ようやく懲りました。遅いってか (^^; 最後に、参考URLを差し上げておきます。 # だから「教えてgoo」だってば!!!! → 自分
お礼
参考URLを、どうもありがとうございます。 今後の参考にさせていただきます。 しかし「ようやく懲りました」ってもう回答していただけないということですか。 それは誠に残念です。 astronautさん、あなたの気持ちが変わりますことを心からお祈りしています。
- astronaut
- ベストアンサー率58% (303/516)
すでに書いた方法でこちらではうまくいっていますから,原因は他にあるような気がしますが,いまだに正確にエラーメッセージを書くという基本的なことすら実践していただけないので,こちらで再現性を確認することができません. 現状を「簡潔に」「要領良く」「もらさず」お伝えいただくまでは,これ以上詳しく回答することは,他のもっと優しい方におまかせします. # つーか,どうやってあれ以上詳しく書けっちゅうんじゃ… お勉強ということですが,今のやりかたで身についている実感が ありますか? 「天は自ずから助くる者を助く」 という言葉を差し上げておきます. # だーかーらー,「教えてgoo」なんだってば. -> 自分
お礼
ご返信ありがとうございます。 うーん一応エラーメッセージらしきものは全て記述したと思うのですが。 「エラーメッセージが何も表示されない」と記述することも回答をいただく手がかりになりますでしょうか。 一応コンピュータについての質問を投稿する前には回答をいただくために何と、何と、何について書かなくてはいけないか頭の中でシミュレーションするのですが、あれも、これも、という風に書いていくうちに文章が長くなってしまい、次第に頭の中が真っ白になっていきます。そこで頭が爆発する前に、ひとまず書き込んでしまい、後は補足要求があったときに、その都度、補足するというのが僕の方針です。 そのため簡単な問題であっても解決に数日かかるということもしばしばありますが自分の起てたスレが、だんだん大きくなっていくことに快感を覚えたりもしています(くだらねー)。 「どうやってあれ以上詳しく書けっちゅうんじゃ」というご指摘について僕が何について詳しくお教えして欲しかったかといいますと「Apache2.0」においての「.htaccess」の書き方です。 前の回答文を拝見しますと「Apache1.x」とは書き方が違うらしく 「AddType text/x-server-parsed-html .html 」 は「Apache1.x」のものだそうで「Apache2.0」では「.htaccess」に何と記述すればよいのか教えていただきたいということです。 また「今のやりかたで身についている実感がありますか」とのことですが、もちろんあります。 「教えてgoo」が無ければ私は今UNIXについて、これほどの知識を持っていないでしょう。 「教えてgoo」は私の生活の一部です!! 回答者の皆様いつもありがとうございます。 ところで実は問題が解決しました。 原因は何だったのかといいますと実はサーバの問題でもスクリプトの問題でもなく単なるパーミッション設定の問題でした。 このスクリプトの置いてあるディレクトリのパーミッションを、ふと見てみましたら「rwxrwxr-x」となっていました。 おそらく「755」とするつもりが誤って「775」とタイプしてしまったのでしょう。 これを修正したら見事にカウンターが動きました。 どうもお騒がせしました。 しかしパーミッション設定を「775」から「755」という風に厳しい設定にして動き出すというのも不思議ですね。 「7」は何でもOKということではないのですね。 「だーかーらー,「教えてgoo」なんだってば」←そうです、ここは教えて君たちの楽園「教えてgoo」です。 これからもジャンジャン質問に参りますのでよろしくお願いします。
- astronaut
- ベストアンサー率58% (303/516)
あーそうか. > いったい、どこと、どこと、どこと、どこを、どのように書き換えればいい > のですか。 という聞き方なのでした.まあ,ここは「教えてgoo」だしなあ… ではそのように. (解) httpd.confの中のSSIを許可したいディレクトリの設定で, Options ディレクティブに Includes を追加する. .htaccessの設定は不要 (別解) .htaccess のOptions ディレクティブに Includes を追加する. この場合, httpd.conf で,AllowOverride ディレクティブに Optionsを指定することが必要. (エラーの原因) > このメッセージより何か原因が思い当たりましたら、是非教えてください。 .htaccess に apache-1.x 用の間違った設定が残っている. # 勉強でやっているようだから,そのつもりで,問題にあたったときの # 勘所がわかるようになるような回答をしているつもりなんだけどねぇ
お礼
ご返信ありがとうございます。 そうです。ここは「教えてgoo」です。 私たちはインターネットという最強のメディアを用いて全国のパワーユーザから回答をいただくことが出来るのです。 この最強のサービスを利用しない手はないでしょう!! とはいうものの同じ方から回答をいただくことも多く、意外にも世界は狭いと感じる今日この頃です。 さて「httpd.conf」ファイルの <Directory /home/*/public_html>項目にて Options Includesを追加したのですがスクリプトは動作しませんでした。 (別解)については、とても興味があります。 というか、なかなかうまくいかないので、これにかけてみたいです。 よろしければ「.htaccess」の記述内容や「httpd.conf」の「AllowOverride」ディレクティブにての設定内容を詳しく教えていただけませんか。 Apacheについてはバージョン1.xに乗り換えるのも一つの手でしょうか。 いや、それはそれで、また混乱が生じそうで怖いですね。 #はい、ただ今CGIを勉強中です。でも今はかなりイライラモードに突入しています。このままでは明日にも爆発して借家の壁を蹴り壊してしまいそうです。ってこれは大げさですね。
- astronaut
- ベストアンサー率58% (303/516)
>また「AddType text/x-server-parsed-html .html >」という内容の「.htaccess」ファイルを同じディレクトリ内に作成しました。 この情報は何に基づくのでしょう? どのバージョンのapacheの設定方法なのか確認していますか? apache-2.0 は 1.3 系列とは全然違うと思ったほうがいいです。 で、答えですが、http.conf を読めばとても親切に書いてあります。 該当部分を転載します。 # Filters allow you to process content before it is sent to the client. # # To parse .shtml files for server-side includes (SSI): # (You will also need to add "Includes" to the "Options" directive.) # AddOutputFilter INCLUDES .shtml このコメントに書いてあるように .htaccess を書けば良いです。 拡張子 html で SSI を動かしたければ、ここの shtml を html にすればよし。
お礼
ご返信ありがとうございます。 「.htaccess」ファイルは教科書の、動かなかったときの対処方法として載っていたものを丸写ししたものです。 このファイルを置くことにより学校のサーバではCGIが動くようになりました。 また「http.confを読めばとても親切に書いてあります」とのことですが英文なので、どれほど親切なのか見当も付きません(汗)。 でも、がんばって訳してみました。 #クライアントに送る前に処理内容をフィルタリングします。 #「shtml」ファイルは「SSI」をparseします。 #(また「Options」に「Includes」を追加する必要があります。) このような感じでしょうか。 うーん、さっぱり分からん(高校の頃の英語は赤点三昧でしたから(汗)。 ひとまず、お教えいただいたとおり AddOutputFilter INCLUDES .shtml ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ AddOutputFilter INCLUDES .html と変更しブラウザから「index.html」にアクセスしてみると奇妙な現象が起こりました。 zipファイル等のバイナリファイルをダウンロードするときのような「ファイルのダウンロード」ダイアログボックスが開いて「開く」か「保存」か問い合わせてきます。 また「□この種類のファイルであれば常に警告する」のチェックボックスなどもあり、何か危険なファイルをダウンロードする前の警告のような感じのダイアログボックスでした。 しかしアクセスしたファイルは、ただの「html」ファイルですので「□この種類のファイルであれば常に警告する」のチェックをはずし、「開く」ボタンを押しました。 また、この後「ファイルを開けません」等のメッセージとともに、どのプログラムで開くか聞かれます。 しかし「html」ファイルは「インターネットエクスプローラ」で開くように関連づけされているのですから自動的にアプリケーションが起動しなければおかしいですよね。 しょうがないので一覧からブラウザを選んで「OK」ボタンを押すと、やっと「index.html」が開きます(しかもなぜか新しいウィンドウで開きます)。 さて、開いた「index.html」を確認したのですが残念ながらアクセスカウンターは動作しませんでした。 あなたは[an error occurred while processing this directive]番目のお客様です。 と本来ならば数字が表示されるエリアに上記のような英文が表示されてしまいました。 「処理中に何らかのエラーが発生しました。」 というような内容っぽいですが、このメッセージより何か原因が思い当たりましたら、是非教えてください。
お礼
夜の個別指導ありがとうございます。 ちょこっとhttpd.confのコメントを読みながら、ちょこっと編集して、あっけなくアクセスカウンタを動かしてしまわれるとは。 まさか!!皆さん米国の方ですか!?(笑) 私も、その読解力が欲しい!! さて結果から、ご報告しますと残念ながら、まだ成功していません。 お教えいただいた設定項目(1)(2)(3)(4)について (1)は各ユーザのホームディレクトリ下の「public_html」ディレクトリ内で「CGI」と「SSI」を許可する設定。 (2)はWebサーバにアクセスしたときの文字コードをクライアント側に合わせる設定。 (3)はCGIスクリプトの拡張子を「.cgi」に統一する設定。 (4)は「SSI」を埋め込むファイルの拡張子を「.html」に統一する設定。 で正解でしょうか。 (1)(2)(3)(4)全てを適用しましたがスクリプトは動きませんでした。 「あなたは 番目のお客様です。」となってしまいます。 またこの設定により「.shtml」の拡張子を持つファイルで「SSI」が利用できなくなりました。 しかし、これについては AddOutputFilter INCLUDES .html .shtml という風に設定項目に「.shtml」を追加したら回復しました。 またAddDefaultCharset Offの項目については #AddDefaultCharset Offのようにコメントアウトせずに「Off」と設定すると、どのような違いがあるのでしょうか。 また今までは<Directory /home/*/public_html>項目のOptionsにIncludesNoExecが設定されていたので「#exec」コマンドが使えないと思っていたのですが今回「IncludesNoExec」を「Includes」に書き換えたにもかかわらず、うまくいかないと言うことは、この他にもさらに何らかの原因があるということなのでしょうか。 個人的には「#exec」コマンドの引数「cmd」や「cgi」に、それぞれ別々の許可設定がなされているのではとも予想しているのですが、さすがにそこまで細かい設定項目はないのでしょうか。 うーん、しかしCGIはソースを完璧に記述したとしてもサーバの設定の影響などにより実行できないことが多々あるのでC言語実習のころよりもイライラすることが多くなったような気がします。 お手数ですが他にも何か解決策がありましたら、どうぞ教えてください。