• ベストアンサー

Apacheでcgiができないんです。

以下のホームページと同じように、設定したのですが。。。 http://www.futomi.com/lecture/apache/config.html 下のcgiは実行できます。 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>Apache</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<H2>Welcome to my computer, Apache Server!</H2>\n"; print "</BODY>\n"; print "</HTML>\n"; しかし、下のcgiは実行できません。htmlファイル、cgiファイル共に、あるホームページからコピペしたので、間違いないと思います。ここではhtmlファイルは書きませんが、以下のURLです。 http://www2j.biglobe.ne.jp/~apollo/server/apacuse.html #!/usr/local/bin/perl $countfile= "count.dat"; open(IN, "< $countfile"); $count = <IN>; close(IN); $count++; open(OUT,"> $countfile"); print OUT $count; close(OUT); print "Content-type: text/plain\n\n"; print $count;

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

  • ベストアンサー
回答No.4

AddHandler cgi-script .cgi で、hoge.cgiしかCGIとして実行してくれないみたいだよ SSIとして実行(Include)できるには、あと2、3ステップ必要です。 <!--#include virtual= でやればあとはできるのでは? #execの方はパラメータの渡しとか、相対パスがコマンドライン仕様なので virtualが使えるならそっち使った方がええと思う。

kamkamkam3
質問者

お礼

どうもご返事ありがとうございます。あー、そうなんですか?SSIの実行には、他に何か設定がいるとは、どこができいたような気がするんですが。。どこで、聞いたのか忘れてしまいました。 あと、他のページからコピペしてきた、test.cgiってのは、一応実行できます。ただ単に、Welcome to my computer, Apache Server! と表示するだけのものなんですが。 他のホームページのを色々試したんですが、ごく単純なものはどれもできます。(例えば、現在時刻を表示するものとか)しかし、ちょっと手の込んだものとなると表示できない、画面が真っ白だったり、InternalServerErrorとなったりします。 「あなたは、番目のお客様です。」と表示され、肝心の数字の部分が表示されません。 少し、頭を冷やして、他のところでも勉強してこようと思うので。。。どうも、ご返事ありがとうございました。また、どこかで。。。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.3

実行できる方は単にHTMLを吐き出すだけ。 実行できない方はファイルの入出力を含む。 となると、そこら辺に何かあるのではという 気がしてきますが、アクセス権とかは大丈夫 ですか?

kamkamkam3
質問者

お礼

アクセス権。。。私には、分かりません。ちなみに、自分としては、httpdconfの設定が間違っていたり、初期設定が間違っているのかな?と思っています。 初期設定が原因で、この様になってしまうという事はないのでしょうか?

kamkamkam3
質問者

補足

あと、以下のコードを試したところコードがそのまま表示されてしまいました。やはりディレクトリとかの、設定がおかしいんでしょうか? #!C:/perl/bin/perl open (COUNTFILE, "<count.dat"); $count = <COUNTFILE>; close (COUNTFILE); $count++; open (COUNTFILE, ">count.dat"); print COUNTFILE "$count"; close (COUNTFILE); print $count; exit; 実行したのは http://localhost/~hoge/counterssi.ssi としたのですが、チルダが自分的には、気になるのですが、 保存した場所は、C:\Apache\users\hogeです。 httpd.confで設定したのは、以下です。何か足りない記述でも、あるのでしょうか?これだけでは、cgiファイルを hogeフォルダから読み取ってくれないのですか? <IfModule mod_userdir.c> UserDir "C:/Apache/users/" </IfModule> <Directory "C:/Apache/users"> Options +ExecCGI AddHandler cgi-script .cgi </Directory> <Directory "C:/Apache/users"> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch ExecCGI Includes <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory>

全文を見る
すると、全ての回答が全文表示されます。
  • taka2456
  • ベストアンサー率29% (36/122)
回答No.2

具体的にどのようなエラーが出てるのか教えてもらえれば助かるのですが perl -wc CGIのファイル名 で一度エラーチェックをかけてはどうでしょうか

kamkamkam3
質問者

お礼

ありがとうございます。 perl -wc counter.cgiとやったところ、 counter.cgi syntax OKって、でました。ていうか、ホームページの見本をコピペしてきたので。。。 多分、単なる設定ミスだと思うんですが、どこがおかしいのか分からないんです。どうもありがとう御座いました。

全文を見る
すると、全ての回答が全文表示されます。
noname#227796
noname#227796
回答No.1

確認です。 サイトの説明にある、 >実際には、一番上の行を詰めてください。 と >UserDir 命令の箇所で、 IncludesNoExec を Includes に変更しなかったなら、最後のhttp://127.0.0.1/~apollo/counter.html はエラーになります。 は大丈夫ですか?

kamkamkam3
質問者

補足

>UserDir 命令の箇所で、 IncludesNoExec を Includes に変更しなかったなら、最後のhttp://127.0.0.1/~apollo/counter.html はエラーになります。 私は、apache1.3.24を使っています。よって、該当する箇所はありませんでした。その代わり? <IfModule mod_userdir.c> UserDir "C:/Apache/users/" </IfModule> の文があるんです。フォルダはこの通りにつくられ、この下の、hogeにcgi, htmlファイルは置いています。 どっちもいいとおもうんですが。。。とにかくhttpd.confの編集は http://www.futomi.com/lecture/apache/config.htmlのとおり、忠実にやったのですが。。 あと、test.cgiはできるのに、なぜ、他のやつはできないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ApacheでCGIが正しく動かない。

    RedHatLinux8をインストールして、 Webサーバーを立てよう~と思い立ててみました。 Apache2.0.40です。 一応htmlファイルはのぞけるようになったんですが、 CGIがちょっとおかしくて・・・ #!/usr/bin/perl print "Content-type: text/html\r\n\r\n"; print "Hello, World."; ↑を書いたtest.plはHello, Worldとちゃんと表示されました。 しかし、掲示板・カウンターを開くと・・・ 「ログファイルを開くことができません」 という主旨のメッセージが表示され、正しく実行できません。 ./log.txt とちゃんと指定しているんですが・・・ そのログファイルを開くとサーバーがCGIをして認識しているらしく、 「InternetServerError」が出て開けない・・・。 CGIの属性は755 ログも緩くして755に設定しました。 それでも状況は変わりません。

  • CGI勉強中(初心者です)

    #!/usr/bin/perl print "content-type:text/html\n\n"; print "<HTML>\n"; print "<head><title>CGI</title></head>\n"; print "<BODY>\n"; print "<H1><FONT COLOR=\"#FF0000\">こんにちは</FONT></H1>\n"; print "</BODY>\n"; print "</HTML>\n"; というCGIつくりました。 プロバイダの説明には Perlの場所 /usr/bin/perl または /usr/local/bin/perl となっていますが、 どこにどう置いて(ホームディレクトリでしょうか?)、どうやって起動させてよいのかさっぱりわかりません。 ご教授ください。

    • ベストアンサー
    • CGI
  • cgi(perl)でパラメータが渡せない

    以下のプログラムでnum=9が伝わらないので、ミスをご指摘ください。 グラフィカルなアクセスカウンタを表示させようとしていますが うまくいかないのでテキストモードでデバッグしています。 [ /usr/local/apache2/htdocs/gif-view.html ] <html> <head> <meta http-equiv="Content-type:" content="text/html; charset=UTF-8"> <title>gif-view</title> </head> <body> <iframe src="/cgi-bin/gif-test.cgi?num=9"></iframe> <!-- <img src="/cgi-bin/gif-test.cgi?0" width=50 height=50> --> </body> </html> [ /usr/local/apache2/cgi-bin/gif-view.cgi ] permission は 755 にしています。 #!/usr/bin/perl print "Content-Type: text/plain;\n\n"; print "gif-test.cgi\n"; $prm0 = @ARGV[0]; if($prm0 = "") { print "Param is exist\n"; } else { print "Param is empty\n"; 実行結果として gif-test.cgi Param is empty となります。 httpd.conf で Script Alias /cgi-bin/ "/usr/local/apache2/cgi-bin/" を有効にしています。

    • ベストアンサー
    • Perl
  • CGIのはじめのコ-ド

    #!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; print "$doctype\n"; print "<HTML>\n"; print "<HEAD>\n"; 上記のCGIの4行目の print "$doctype\n"; は なにをしているのですか、宜しくお願いします。

    • ベストアンサー
    • CGI
  • CGIのログをHTMLで表示

    CGIのログ(カウント)をHTMLにSSIで表示させようと思い下記のCGIを考えたのですがうまく表示されません。 皆様のお力をお貸し下さい! [log.dat] L内容 DataSu='***'; (***にはカウント数字が入っています) 上のカウントログをHTML表示させる為にCGIを作る [count.cgi] #!/usr/local/bin/perl #カウントログ読み込み open(IN,"ログまでの相対パス"); # カウンターを読み出す $count = <IN>; #ファイルを閉じる close(IN); #サイト数の表示。 print "Content-type: text/html\n\n"; print "$count"; 上記のCGIを表示させるとDataSu='***';とファイル内容が全て表示されてしまいます。 ***のカウント数だけ表示させるにはどうしたらいいのでしょうか?

    • 締切済み
    • CGI
  • Apacheを入れたのにローカルでCGIが動かない

    こんにちは。今CGIの勉強をしています。perlを使っているのですが、サーバーにアップする前にローカルで動作チェックをしようと思い、ApacheとActivePerlをインストールしました。 その後、Apacheを起動して、ローカルのCGIファイルにアクセスしたのですが、ページを表示できませんと出てしまいます。 ping localhostはちゃんと通ります。 環境 OS:WindowsXP HomeEdition SP2 セキュリティーソフト:無し ファイヤーウォール:解除済み Apache設定 Network Domain 127.0.0.1 Server Name   127.0.0.1 Version2.0.58 ブラウザ:IE6.0 プログラム保存先:C:\Program Files\Apache Group\Apache2\htdocs ファイル名:hello.cgi(拡張子表示有にしている。.txtなどは無い) ActivePerl:Version5.6 保存先:C:\Perl\bin(C直下) コード #!C:/Perl/bin/perl print "Content-Type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<h1>Hello World!</h1>\n"; print "</body>\n"; print "</html>\n"; exit; 参考にしたサイト http://perl.misty.ne.jp/01.html 以上よろしくお願いします。

    • ベストアンサー
    • CGI
  • 伝言掲示板の作成(超初心者です)

    授業の課題で伝言掲示板を作るのですが 行き詰ってるので助けてください。 ファイル名write.htmlで <html> <body> 掲示板プログラム<br> 書き込み内容を指定してください <form action="write.cgi"> <input type="text" name="contents"> <input type="submit"> </form> </body> </html> write.cgiで #!/usr/bin/perl print "Content-type: text/html\n\n"; use CGI qw(:standard); $value = param("contents") ; open(OUT,">contents.txt"); print OUT $value; close(OUT) ; print "<html><body>"; print "書き込みが終了しました"; print "</body></html>"; read.cgiで #!/usr/bin/perl print "Content-type: text/html\n\n"; open(IN,"contents.txt"); $value = <IN>; close(IN); print "<html><body>"; print $value; print "</body></html>" 空のテキストファイルcontents.txtを作成しました。 これで伝言掲示板はできますよね?? では前の書き込みが消えないようにするにはどうした良いですか? あと、装飾したい場合はwrite.htmlにタグを利用して書けばよいのですか?? わかりにくい書き込みですみません。

    • ベストアンサー
    • CGI
  • CGIが文字化けしてしまう。(Perl)

    環境 WinXP    Apache ActivePerl 開くソフトは「Tera pad」      でやっています。ソースは #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGI TEST</TITLE></HEAD>\n"; print "<BODY>ああああ。</BODY>\n"; print "</HTML>\n"; __END__ です。「ああああ」部分が「‚ ‚ ‚ ‚ B」 と表示されます。 どなたか解決方法ご存知の方いらっしゃいましたら ご回答お願いします。

    • ベストアンサー
    • CGI
  • アクセスカウンタについて

    #!/usr/local/bin/perl # カウントファイルの読み込み open(IN, "<./count.dat"); $count = <IN>; close(IN); ++$count; # カウントファイルへの書き込み open(OUT, ">./count.dat"); print OUT $count; close(OUT); # サーバ出力 print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>Perlあくせすかうんたー</title></head> <body> <p>あなたは……$count番目の訪問者です。</p> </body> </html> END 以上のように書きcount.datを作成して同じディレクトリ内においたのですが、カウントが1から増えません。サーバがいけないのか、スプリクトがわるいのかよくわかりません;; ちなみにサーバはlinuxで構築しています。

    • ベストアンサー
    • Perl
  • Perlをcshスクリプトに書きなおしたい

    以下のPerlで書かれたCGIをcshスクリプトに書き直したく思っています。 #!/usr/local/bin/perl # load libraries require ("/usr/local/bin/cgi-lib.pl"); # cancel stdout buffering $| = 1; # header response print "Content-type: text/html\n\n"; print STDOUT "<HTML><HEAD></HEAD><BODY>\n"; &ReadParse; open(COMM, "|./message > ./message.out") || die; $in_text = $in{"Name"}; print COMM "Name: $in_text\n"; ... "Name"という変数名で受け取った文字列を$in_textに代入している ようですが、この辺りの処理、cshではどう書けばよいのでしょうか。

    • ベストアンサー
    • CGI
このQ&Aのポイント
  • プリンターDCP-J414ONの初期設定で表示されたフォームウェアについて、その役割や設定の効果について調べています。また、この設定が推奨されているかどうかも確認しています。さらに、再度設定をする場合の方法についても解説します。
  • プリンターDCP-J414ONの初期設定で表示されたフォームウェアについて調べています。この設定をするとどのような効果があるのかを解説し、推奨されているかどうかも確認しています。また、再度設定をする方法についても解説します。
  • プリンターDCP-J414ONの初期設定で表示されたフォームウェアについて調べています。この設定の役割や効果について解説し、推奨されているかどうかも確認しています。再度設定をする場合の方法についても調べています。
回答を見る

専門家に質問してみよう