• ベストアンサー

起動できない。コードだけが表示されてしまう。

最近CGIを勉強し始めたものです。 apache2.2.9をいれ、ActivePerl(Ver5.005_03)を入れて 下記のような簡単なコードを書いて実行してみましたが起動ができません。 ===================== #!/usr/bin/perl print "abc"; ===================== なにか設定が必要でしょうか? httpd.confあたりで設定が必要な部分がありますでしょうか? 調べてみたところ、推奨する設定だったのでそのままにして テストしています。

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

  • ベストアンサー
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.6

No.2です。 私の質問にお答えいただいてないので再確認です。 o Perl.exe は /usr/bin/ (Windowsなら C:\usr\bin)にありますか。  そうでないなら、スクリプトの1行目に書く #!/usr/bin/perl を perl.exe のパスに合わせて書換えないといけません。 もし、C:\perl\bin\perl.exe なら、#!/perl/bin/perl です。 o cgiファイルは cgi-binフォルダに置いてありますか。  apacheの初期設定は cgi-binフォルダ以外では cgiファイルは実行できないと思います。 o httpd.confで .cgiファイルが実行できるようにしましたか。  httpd.cnf の中に、  #AddHandler cgi-script .cgi という行があります。頭に付いている # を取ってください。 そうしたらいったん、apacheを止めて再起動した後、ブラウザから目的のcgiファイルをリクエストしてください。

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

その他の回答 (8)

  • hok212
  • ベストアンサー率66% (100/150)
回答No.9

まず、Perlが正常に動いているか否かは次のように確認します。 コマンドプロンプトを開き > perl -v [Enter] これでPerlのバージョン等が表示されれば、perl.exeへのパスが通っていると判断できます。 さて、PerlのCGIをブラウザから呼び出すとコードが表示されてしまう件ですが、 初期設定のcgi-binディレクトリ内で実行するのであれば、#6さんが回答されているとおり、 httpd.conf内の「#AddHandler cgi-script .cgi」の先頭の#を取ればOKです。 cgi-binではなくhtdocs内で実行したいのであればhttpd.confのhtdocsにあたる ディレクティブ設定内(例:<Directory "C:/Apache22/htdocs">)のoptionsに ExecCGIを追加する必要があります。 ※ここまでは Apache1.3系(正確には1.3.9以降)、2.0系共通です。 ※以下はApache2.2系に限った説明になります。 初期設定のcgi-binでもhtdocsでもない、httpd.conf内にてディレクティブ設定を 行っていない場所で実行させたい場合は、extraディレクトリ内にある userdir.conf で 設定を行い、この設定ファイルをhttpd.conf側で読み込んでやる必要がありますが、 失礼ながら質問者さんにはまだ敷居が高いと思いますので割愛します。 ※どうしてもこの設定を行いたいのであれば、引き続き質問してください。 ※1.3系、2.0系であれば、上記の説明すべてをhttpd.confで行います。

全文を見る
すると、全ての回答が全文表示されます。
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.8

「コードだけが表示されてしまう。」のコードって、ソースコードですか? エラーコードですか? 私はソースコードだと思ってましたが、確認させてください。

全文を見る
すると、全ての回答が全文表示されます。
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.7

No.3 です。 > >デフォルトでは、CGI禁止だったかも。 > これはどこを見たら禁止になっているのかわかるのでしょうか? さくっと答えられる単純なものではありません。 前回の参考URLの内容で、判らない部分があるのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • kyotokyo
  • ベストアンサー率35% (27/77)
回答No.5

何度もすいません print "content-type:text/html\n\n"; を入れてみるとどうですか?

noname#165473
質問者

お礼

ありがとうございます。 でも結果は同じでした。

全文を見る
すると、全ての回答が全文表示されます。
  • kyotokyo
  • ベストアンサー率35% (27/77)
回答No.4

まずapacheが正常かみるために apacheのルートディレクトリに適当なhtmlファイルを置いて http//localhost/○○.htmlもしくはhttp://127.0.0.1/○○.html でアクセスできるか確認します。 これで正常に見れるようだとapache自体は動いてることになるので 次はapacheから.plもしくは.cgiファイルを開いたとき 正常にperl.exeが呼び出せているか確認します。 apacheの設定ファイルを見て確認しましょう。 以上の二点が正常なら基本的には動くはずです。 フリーソフトの「Perlをはじめよう!」等でperl.exeが正常か確認してもよいでしょう。 http://www.vector.co.jp/soft/win95/util/se169799.html これで駄目なら一度アンインストールしてみて ネットの指南サイト等をみながらやったほうが良いと思われます。

noname#165473
質問者

補足

はい。apacheは正常に動いています。 >正常にperl.exeが呼び出せているか確認します。 >apacheの設定ファイルを見て確認しましょう。 この部分が気になったんですが正常に呼び出せているかの 確認はどうするのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.3

マニュアルは読まれましたか? 参考URLです。 デフォルトでは、CGI禁止だったかも。

参考URL:
http://www.apache.jp/manual/howto/cgi.html
noname#165473
質問者

お礼

>デフォルトでは、CGI禁止だったかも。 これはどこを見たら禁止になっているのかわかるのでしょうか?

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

「実行してみた」 というのはどういうふうにしたのですか。ブラウザから、たとえば (1) http://localhost/apache/cgi-bin/xxx.cgi とリクエストしたのですか。 (2) file:///C:/apache/cgi-bin/xxx.cgi とリクエストしたのですか。 もし、(2)ならば実行されず、ファイルの中身がそのまま表示されます。 (1)でリクエストしたのにファイルの中身がそのまま表示されたのなら、 o Perl は /usr/bin/ (Windowsなら C:\usr\bin)にありますか。 o apacheを起動しましたか。 o cgiファイルは cgi-binフォルダに置いてありますか。(設定によりますが) o httpd.confで .cgiファイルが実行できるようにしましたか。 もし、上記のことが正しいのなら、このスクリプトにはヘッダ出力行がありませんから、500 InternalServerError になるはずです。 ブラウザ表示行に先だって print "content-type: text/html\n\n"; を記述しないといけません。 ===================== #!/usr/bin/perl print "content-type: text/html\n\n"; print "abc"; ===================== ※No.1さんは何か勘違いされたようです。

noname#165473
質問者

お礼

ありがとうございます。 はい。(1)とリクエストしました。 apacheも起動しています。 http://localhost も正常に表示されます。 気になりましたけどこれはどう設定したらよいでしょうか? o Perl は /usr/bin/ (Windowsなら C:\usr\bin)にありますか。 o cgiファイルは cgi-binフォルダに置いてありますか。(設定によりますが) もしかしたらこれらが関与しているかもしれません。。。

全文を見る
すると、全ての回答が全文表示されます。
  • octave-G
  • ベストアンサー率39% (41/104)
回答No.1

print "abc";→prinf "abc";

noname#165473
質問者

お礼

ありがとうございます。 でもこの部分を修正しても結果は同じでした・・・ 心当たりありますか? 何らか設定が要ると思っていてあれこれ調べているんですが それらしき情報がみつかりません。。。

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

関連するQ&A

  • windows環境でのapacheのsymlink

    以下の環境で開発をしています。 OS: windows XP ActivePerl 5.8.8 apache 2.0.64 perlスクリプトの第1行目に #!/usr/bin/perl を記述していますが、ActivePerl のありどころが C:\dev\perl\bin\なので第1行目を #!/dev/perl/bin/perl  にしなければなりません。 #!/usr/bin/perlの記述をそのまま使う為に巷でよく言われているようなwindowsのジャンクション機能を利用しています。 Cドライブ直下に「usr」ホルダを作り、ここにC:\dev\perl\bin\のジャンクションを設定しました。 するとC:\usr\を覗くとbin\が存在します。つまりC:\dev\perl\bin\はC:\usr\bin\でアクセスできるようになります。 しかしこの状態で#!/usr/bin/perlの記述をそのまま使うと500エラーが出ます。 apacheのhttpd.confには <Directory /> Options FollowSymLinks </Directory> を記述してあります。 その他に何か設定が必要でしょうか? 宜しく御教授お願いいたします。

  • fedora core3でCGIがソースコードで表示されてしまいます。

    document root("var/www/html")でCGIを使うために、httpd.confの設定で#Addhandler cgi-script →Addhandler cgi-script , と書き直し、<Directory"var/www/html">のoption項目にExecCGIと追加しました。 アクセスするときはlocalhost/***.cgiとしています。 cgi fileのperlのパスが#!/usr/bin/perlとなっているのでその場所にちゃんとperlがあるかも確認しました。 .cgiファイルはWindowsXPからASCIIで転送したものです。.httpd.confの設定以外はデフォルトの状態です。 何日間か試行錯誤したのですが、うまくいきません。どうかご助言お願いします。

  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • activeperl5.6が起動できない

    activeperl5.6が動きません。 activeperlをインストールして、apacheのhttpd.confの中身を本を参考に編集しました。 sampleのhello.plというファイルを自分の環境ではc:\www\cgi-binというフォルダーの中にいれ、 ScriptAlias /cgi-bin/ "C:/www/cgi-bin" <Directory "C:/www/cgi-bin"> AllowOverride None Options None AddHandler cgi-script .cgi .pl でcgiの実行を許可して AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl で拡張子とperlを関連付けています。 browserからたとえばhttp://localhost/hello.plを入力すると 実行が許可されていないとブラウザーで表示されます。 Forbidden You don't have permission to access /test.pl on this server. Apache/1.3.39 Server at localhost Port 80 アパッチのエラーログを見ると、 [error] [client 127.0.0.1] couldn't spawn child process: c:/

    • ベストアンサー
    • CGI
  • Apacheを複数のhttpd.confを用いてる場合の再起動

    Apacheを複数のhttpd.confファイルを用いて運用している場合、 個々のhttpd.confを指定してのApache再起動は可能なのでしょうか? 試しに、httpd_1.confとhttpd_2.confを用いて実施してみましたけど、 エラーになってしまいました。 手順を踏まえての詳細を以下に示します。 1./usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd_1.conf コマンドでApacheを起動。 2./usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd_2.conf コマンドでApacheを起動。 3.その後Apacheを停止したらプロセスが残ってしまいました。

  • 1行目、Perlの宣言

    ActivePerlをC:\Perlにインストールしました。するとperl.exeはC:\Perl\bin\perlにありました。 そこでCGIファイルの1行目に   #! C:/Perl/bin/perl としましたが、実行してみるとコードがそのまま表示されてしまいます。 「Perl」と大文字を含むからかと「P」を小文字に変えてみたり、あるいは「/」を「\」にしてみたりと試しましたが、やはり機能しません。 httpd.confは教科書に書いてある通りに書き換えました。 何が原因でCGIがまともに動かないのでしょう。 OSはWindows Vista、Apacheは2.0.54、ActivePerlは5.8.7.813です。

    • ベストアンサー
    • CGI
  • windowsでperlの1行目を無視する。

    CGI(perl)の1行目である、#!/usr/bin/perlを読み飛ばす設定をしたいと思います。 httpd.confで ScriptInterpreterSource registry としました。 さらにレジストリで拡張子の関連付けが必要なようなのですが、それの具体的な方法がわかりません。 ご教授お願いします。 やりたい事は、ローカルとサーバーのperlのパスがことなるため、1行目を変更するのがめんどうでそれを改善したいのです。 現在は、c:\usr\bin\perl にperlをインストールして回避していますが・・・ 環境 windows2000 apache1.3.29 perl

    • ベストアンサー
    • CGI
  • ApacheでCGIが正常に動作しません。

    httpd.confの設定でPerl.exeの場所の指定は必要なのでしょうか? 以下の場所に設定を行うのかと思ったのですが、設定するとApache起動時にprogram filesがエラーになってしまいます。 ServerSignature On !g:/program files/apache group/apache/perl/bin/" 設定が必要であれば設定方法をお願いします。 httpd.confの設定に <Directory "G:/Program Files/Apache Group/Apache/cgi-bin"> AllowOverride None # Options None Options ExecCGI Order allow,deny Allow from all </Directory> は追加してあります。 現在、CGIの結果として #!/perl/bin/Perl.exe print "Content-type: text/html\n\n"; print "\n"; print " Hello! WORLD \n"; print "\n"; exit; のように表示されない命令も全て表示されます。 本当はHello!WORLDだけを表示したいのですが。

  • 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実行ディレクトリをデフォルト以外に追加設定する方法

    apacheのcgi-bin/のディレクトリはデフォルトだと、 DIR: /usr/local/apache/cgi-bin/ に設定されていると思います。 さらに実行出来るディレクトリを追加してあげる場合 httpd.confのScriptAliasを 手順的に追加するだけで出来るのでしょうか? 例 ScriptAlias /cgi-bin/testdir/ "/home/test/testdir/" <Directory "/home/test/testdir"> Options +ExecCGI </Directory>