• ベストアンサー

perlスクリプトのブラウザURLから実行でhttpは何?

ネットワークプログラミングのPerl開発環境構築でわからない点があります。コマンドラインからは実行できたのですが、ブラウザのURLにHttp://…/スクリプトファイル.pl を書き込んで実行できると参考書にはあるのですが、サーバーではないマシンにはlocalhostは存在しないので、そんな無茶な!という状況にあります。どなたか助け船をお願いします。

  • Perl
  • 回答数14
  • ありがとう数21

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.9

もう少し易しく解説した方が良かったでしょうか? ブラウザとPerlの組み合わせで開発を考えている時点でHTTPサーバ抜きに考えることはできません。 HTTPサーバが無い=CGIが使えない=ブラウザではプログラムが動かせない ということです。 > Http://…/スクリプトファイル.pl を書き込んで実行できると参考書にはあるのですが そこにはHTTPサーバと「.pl」ファイルをCGIとして理解できる設定が必要という前提条件が書かれていませんか? いくらなんでもそのまま実行はできませんし、ローカルなファイルはhttp://からじゃなくてC:\などファイルを示す別の文字列からはじまりますよ。 http://云々というのはHTTPサーバがあるという前提条件ということではないでしょうか。 本当に大事な部分をすっ飛ばしてそんなことを書いてある参考書があるとすれば、なにかたちの悪い冗談ではないかと思います(ちょっと面白そうなのでできれば教えてください)。 > クライアント側でサーバーとの通信を制御するPerlスクリプト・ファイルとその画面上のインターフェースをHTMLで作ればできるはずですよね ブラウザがHTMLからローカルのアプリを自由に動かせる仕組みってやばいでしょ HTMLからFORMATコマンド起動してハードディスクをきれいさっぱり無くさせるなんてことができたら・・・。 そういうブラウザ自体作って作れないことは無いでしょうけど存在はしていないかと思います。 まぁWindowsOSでIE限定なら、VBScript+ActiveXからWindowsアプリを条件付で動作させることは可能でしょうけどHTMLじゃ無理です。 > Web上の特定のデータベースサーバーと会話的な通信を行うためのperlスクリプトファイルを作るには WebサーバとDBサーバは別物です。 HTTP上のということはWeb(HTTP)サーバを介すという点でご質問の趣旨から外れてしまうでしょう。 HTTPサーバを介さないでDBサーバと直接通信を行い尚且つブラウザでコントロールしたいならWindowsであればODBC(JDBC)ドライバとJava(Applet)を駆使する以外に無いでしょう。 HTTPサーバを介すなら、そのHTTPサーバに直接CGIをアップして実行させればクライアント側にHTTPサーバをたてなくて済むでしょう。 さらに、実はHTTPサーバの結果のテキストデータにのみ用があってということなら・・・やっぱりPerlだけじゃ・・・ あとは、スケジュールタスクとかでPerlを動かせて取得した結果をHTMLで整形してローカルのファイルに吐き出して、それをブラウザで見るようにするとか位でしょうか。 長々とすいませんでした。

Nrt_Tsyk
質問者

お礼

詳しいく、説明していただき、勉強の方向を掴めました。 ネットワーク・プログラミングの勉強の前にPerlの基礎的な知識が不足していることがわかってきました。 初心者の愚問に親切にご回答くださり、ありがとうございました。

Nrt_Tsyk
質問者

補足

「参考書」は「Perlテクニックブック」ミューテック著C&R出版です。「URLにcgiファイル名を指定して実行できる」という記述はその37ページにあります。この本の前書きに動作確認確認環境は Linux 9, Perl5, データベースPostgreSQL7とあります。 私のOS環境はWindowsNTです。

その他の回答 (13)

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.14

> 「クライアントはサーバの機能もなければならない」という不可解な前提を「動作試験段階では」ということで理解 この文面だけだと誤解をされているように思えるのですが 問題点は  ブラウザをプラットフォームとしてプログラムを実行させることが「サーバを必要」 とさせているのです。 ブラウザにはそんな機能が無いので、HTTPサーバ側でCGIというインターフェースでもってそれを補っているのです。 基本的にブラウザはその名の通りブラウズの機能しかないのです。 動作試験だろうが本番稼動だろうが、質問者様の機能を前提にすると、CGIを実装するHTTPサーバアプリがそこに必要となります。 前回答者さんのおっしゃるようにクライアント・サーバというのはサービス形態上での立場を表す便宜上での言葉でしか有りません。 インターネットでは接続されているすべての端末を一律「HOST」といいます。決してサーバとかクライアントという言い方はしません。 数あるインターネットのサービス、例えばWebサービスという狭義の範囲において、閲覧するHOSTを便宜上クライアントと呼び、コンテンツを提供するHOSTをHTTP(Web)のサーバと呼ぶのです。 もうご存知かもしれませんが、GoogleがGearsというブラウザ用プラグインで、オフライン状態のローカルSQLiteをまわせるモノを提供してます。 詳細は使ったことが無いのでよくわかりませんが何かの参考になるかも・・・。

Nrt_Tsyk
質問者

お礼

わかり易いご回答に感謝申し上げます。沢山の方々がわざわざ回答の時間を割いてくださって驚いています。Google Gearsを覗いてみました。浅い理解しかできていませんが、近未来の汎用パソコン・ソフトの原型がこれなのでしょうね。

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.13

解決された様ですが、ちょっと参考情報を。 サーバーとかクライアントとか言うのは、本当はコンピュータの種類ではありません。 http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%B5%E3%83%BC%E3%83%90%E3%83%A2%E3%83%87%E3%83%AB 何らかのサービスを要求するのがクライアントです。 クライアントの要求に答える形で、そのサービスを提供するのがサーバーです。 つまり、サーバーとかクライアントとかはソフトウェアの種類なのです。 例えば InternetExplorer はWebクライアントソフトウェアです。 ユーザーの操作に従い、HTTPプロトコルで要求を送出します。 送出の宛先は Webサーバーソフトウェアです。 Webサーバーソフトウェアには Apache とか IIS とかがあって、クライアントの要求に応えてファイル内容等を返送します。 WebサーバーソフトウェアはWebクライアントソフトウェアと違うコンピュータで動いている事が多いのですが、開発環境等では同じである事も珍しくありません。 要求を受けてサービスを提供するコンピュータにはサーバーソフトウェアが必要なのですから。 「サーバー」という用語をコンピュータの種類と考えた方が便利な局面はあるかも知れませんが、今回の話題には違和感の元でしょうね。 余計なお世話だったら、すみません。

Nrt_Tsyk
質問者

お礼

「余計な」などとはとんでもない。わかり易いご回答をありがとうございました。  「何をしたいのかわからない質問」をしてしまったわけですが、動機は、ある公的機関のデータベース利用を申請し、許可されたのですが、そのデータベースとの通信インターフェースを自分用に便利に構築したいと考えた次第です。ホームページ用CGIを作れる程度の知識ではPerlのごく初歩しか理解していないことが、わかってきました。

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.12

やりたい事は、以下で合ってますか? 要求1 自作のPerlスクリプトを、手元のマシンの CPU で実行させる。 要求2 その起動は、Webブラウザで http://○○/△△/××.pl を開く。 その為には、手元のマシンでWebサーバーを動かす事が必須です。 それが目的で無くとも、手段として必要という事です。 Webサーバーを動かせないなら、要求のいずれかを諦めないと無理かと。

Nrt_Tsyk
質問者

お礼

ありがとうございます。 おかげさまで「クライアントはサーバの機能もなければならない」という不可解な前提を「動作試験段階では」ということで理解できました。

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.11

 書評を見る限りではそんなに悪い本ではなさそうですが、Perlの文字列処理など機能面にスポットを当てすぎて動作環境についての記述が必要最小限になっていると見ました。 前の方が回答してくださっているように、書籍内容の話が前後していて前提条件を見落としている可能性が高いです。  ブラウザはOSではないので通常のブラウザ内部でWindowsのアプリケーションソフトが動作しない(IE+Officeは例外→Opera+Officeはだめでしょう?)のと同様で直接実行は不可能です。  ブラウザからのHTML表示が前提条件であるなら、解決策として手っ取り早いのはWebサーバをローカルに構築するより手はないでしょう。 他の回避策は環境そのものをプログラミングするためあまりに手間がかかりすぎるかと思います。

Nrt_Tsyk
質問者

お礼

ありがとうございました。 クライアントとはいえ試験段階ではサーバー機能が必要ということを理解しました。

回答No.10

>「参考書」は「Perlテクニックブック」ミューテック著C&R出版です。 >「URLにcgiファイル名を指定して実行できる」という記述はその37ページ > にあります。 Perl テクニックブックの p.38に、「スクリプトを実行できる Web サーバ が必要になります。云々」と書いてありませんか? もう既に回答は出つくしているようですので、レスポンスは不要です。

Nrt_Tsyk
質問者

お礼

ありがとうございます。 ご指摘のとおりの記述がありました。落ち着いてその後のページも読んでいれば、皆さんを煩わせることもなかったということでしょうか。 Perlをマスタする自信をなくして、少々パニクッてしまったようです。 ご容赦願います m(_ _)m

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.8

> 自前サーバーを立ち上げるのが目的ではなく、Web上の特定の > データベースサーバーと会話的な通信を行う方法をperlで > 作ろうとしている次第です。 Webサーバ上のデータベースサーバと直接通信するような perl プロクラムを作ろうとしているのでしたら、DBI モジュールの 勉強をしてください。 Webサーバ上の perl CGI をインターフェースにして、データベース を操作するようなプログラムを作ろうとしているのでしたら、 LWP モジュールの勉強をしましょう。 どちらも Google 等で perl DBI や perl LWP で検索すると 参考となる記事がたくさん見つかります。 ところで > ブラウザのURLにHttp://…/スクリプトファイル.pl を書き込んで > 実行できると参考書にはある とのことですが、ウェブサーバ上の CGI を作るための参考書を 読んでいるんじゃないですか。どんな環境が必要かきっと書かれて いると思うので、もう一度 読み直してみてはいかがでしょうか。

Nrt_Tsyk
質問者

お礼

ご指摘のとおりです。的確なるご助言、感謝とともに、エキスパートの眼力に敬服します。 ありがとうございました。

回答No.7

OELでも使えばできるか。まあ、どちらにしても普通の方法じゃないだろwww。イミフ

Nrt_Tsyk
質問者

お礼

初心者の愚問で皆さんを煩わしたようです。 ありがとうございました。

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.6

私もまだ初心者の域ですので間違ったアドバイスをしていたらごめんなさい。 WWWサーバーのないWindowsマシンなら、AN HTTPDで簡便なサーバーが構築できます。 詳細は以下サイトに載っています。 自宅マシンWWWサーバ化計画 http://www.kent-web.com/www/index.html

参考URL:
http://www.kent-web.com/www/index.html
Nrt_Tsyk
質問者

お礼

ご回答ありがとうございます。 自前サーバーを立ち上げるのが目的ではなく、Web上の特定のデータベースサーバーと会話的な通信を行う方法をperlで作ろうとしている次第です。私の知識レベルが低すぎて、質問の仕方が悪いのかもしれません。ご親切な回答に感謝申し上げます。

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.5

「サーバマシンとは別のPerlエンジンだけをインストールしたクライアントマシン上で」CGI のデバッグや動作確認をする為には、そのクライアントマシンにも本番サーバーと同じ Apache か何かをインストールするのが結局は早道だと思います。 それ以外の方法も確かにありますが、制約が多く理解度が深くないと使い物にならないです。 # クライアントマシンのApache設定で苦労する方は、Apache無での CGIデバッグにはもっと苦労するでしょう。

Nrt_Tsyk
質問者

お礼

クライアントであっても動作試験のためにサーバー機能は必要ということですね。ありがとうございました。

Nrt_Tsyk
質問者

補足

ApacheとPerlでCGIを作り、プロバイダのWebサーバーにアップロードすることには成功しています。今回の質問は、そのようなCGIの開発ではなく、Web上の特定のデータベースサーバーと会話的な通信を行うためのperlスクリプトファイルを作るには、どのような開発環境を整えればいいのかという質問です。サーバーにアップロードするのではない、クライアント側でサーバーとの通信を制御するPerlスクリプト・ファイルとその画面上のインターフェースをHTMLで作ればできるはずですよね?

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.4

通信システムのOSI参照モデルというのをご存知でしょうか? HTTPはその中でも表層部分に当たる第7層に位置しています。 これはなにを意味するかというと第3層及び第4層にあたるTCP/IPの存在する環境ありきの仕組みを意味しています。 俗にlocalhostの127.0.0.1は中でも特殊なループバック用のIPアドレスが通常割り当てられていて(意図的にそうじゃないようにも出来る)、結線で言えば出力がそのまま入力につながっているようなイメージでいてください。 ブラウザからHTTPを介してシステムプログラムと通信をするには、普通に考えればHTTPサーバの介在が必要ということです(但しMSのブラウザは、例によって自社OS用に裏技的の変な仕組みがあるのかも)。 その開発したプログラムにhttpを利用した通信機能を加えれば可能かもしれませんし、Perlで簡易httpサーバを作るのもそう難しいことではないのですが、直接ブラウザからシステムプログラムをコールするのは無茶かもしれません。 ここは素直にxamppなどでサーバ環境を構築した方が良いと思います。 簡易HTTPサーバについては「インターネットを256倍使う本vol.1&2」あたりが読みやすく書いています。 xamppはWindowsのperl環境を使われているのなら説明の必要は無いでしょう。 有名なので検索ですぐ出てきます。

Nrt_Tsyk
質問者

お礼

ありがとうございました。 ご回答を理解しきれないレベルであることを認識したしだいです。おすすめのあった参考書あたりから、あらためて挑戦してみます。

関連するQ&A

  • ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません

    ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません windowXP, perl5 で開発しています。 簡単なプログラム(test.pl)なのですが ----- #!/usr/bin/perl use IO:Socket メール送信処理 1; ----- ブラウザ上から実行すると正しくメール送信されますが、 これをコマンドプロンプトから ----- perl test.pl ----- とすると、 Can't locate IO/Socket.pm と出てしまいます。 pathが通ってないとか絶対パスとかそのあたりかと思い、 socket.pmのあるパスを通したりしましたが、変化しません。 use IO::Socket を絶対パスとかで指定するのでしょうか? 解決方法をお教え頂ければと思います。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • Cygwin上でperlスクリプトの実行

    Cygwin上で、例えば「hello.pl」というperlスクリプトを 実行するのに $ perl hello.pl や $ ./hello.pl では実行できるのに $ hello.pl だと bash: hello.pl: command not found と なってしまって実行できません。 $ hello.pl でコマンド化して実行したいのですが どのようにすればよいか教えてください。

  • PERLスクリプトのコマンドライン実行

    お世話になります。 Perlスクリプトをコマンドライン実行するとき、 perl スクリプト名.pl とすると思いますが、その際、コマンドライン引数を渡してスクリプト内で、その引数を見て処理したいと思うのですが、そういうことできますか?引数の渡し方、受け取り方を教えてください。

    • ベストアンサー
    • Perl
  • Perlスクリプトが実行できない??どうやったら実行できる?

    前にPerlスクリプトを実行する際に、 まず、PCに何かインストールしてから 実行できるようになったのを覚えています。 パソコンを再インストールしたのですが、 何をインストールすれば実行できるように なるか忘れてしまいました。 実行すると ERROR:cmd~~:Cannot start command. (perl.exe ~~.pl 1152 864) と出ています。 どなたか教えてください。 windows2000を使用しています。

    • ベストアンサー
    • Perl
  • cronでのPerlスクリプト実行

    少し前に同様の質問をしましたが、やはり解決していませんでした。 #!/usr/bin/perl open(OUT,">/home/test/test.log"); print OUT "OK"; close(OUT); このスクリプトをcrontabに以下のように記述しました。 0 0 * * * /home/test/test.pl > /dev/null 2>&1 パーミッションは省略します。 このようにすると、正常にtest.logが出力されました。 しかし、本当に実行したいスクリプトを同様にしたところ、 正常に動作しませんでした。cronログには記録されます。 実際のスクリプトは長いのでここには掲載できませんが、 主な処理はおおよそ次のようなことをしています。 ・pmとplモジュールがあり、plからpmを呼び出している。 ・plもpmも自作のユーザ関数の組み合わせ ・ファイルはtestユーザが所有し、実行権限は777。  (動作確認後、徐々に落としていきます) ・plでは、use encoding 'utf8'。 ・スクリプトにオプションを付けて、引数を読み込む。 ・loggerでsyslogへ結果を出力。 ・子プロセスを生成して処理の一端を行わせている。 ・opendir、readdirなどを使用。 ・xxxxxx.datファイルを読み書きしている。 ・CPANにあったメール送受信モジュールを使用している。 ・ファイルをbz2圧縮している。 などです。 コマンドラインから実行すると確実に正常に動作します。 気になるのはPerlスクリプトの内容でモジュールを使うときは、 パスが通っていてもフルパス指定しないといけないのでしょうか? しかし、フルパスと言ってもせいぜいsystem()で実行するコマンドを フルパスにするくらいしか思いつきません。 うまく実行できない理由として考えられる可能性があることを 教えてもらえませんか? 根本的な解決としては、cronでの実行とコマンドラインからの実行は 何が違うのかが明確になれば対処できるのかもしれません。 よろしくお願いします。

  • Perlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない

    現在Perlスクリプトを作成し サーバにアップしました。 SSHでサーバにログインし #perl a.cgi と実行したところ(CGIとして動作させるため。中身はPerlスクリプト) Content-type: text/html <html> <body> あああああ </body> </html> のようなメッセージが表示され正常に動作しているとおもいます。 しかし、 http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると 500 Internal Server Error になります。 パーミッションは755で正常 Perlのパスは#!/usr/bin/perlとしており、これも正常です。 文字コードはeuc-jp 改行コードLF サーバはApache/1.3.33 Perlバージョンは5.8.4 自分のパソコン上でperl+HTTPサーバ(httpd)を使うと HTMLふぁいるとして出力されます。 サーバ上でHTTPを使ってアクセスしたときのみエラーとなります。 このような現象が起こるのですが原因がわかりません。 お願いします。

    • ベストアンサー
    • Perl
  • perlスクリプト内でシェルコマンドを実行するには??

    タイトル通りなのですが、perlスクリプト内でシェルコマンドを実行させる方法が分からなく、困っています。 実行したいシェルコマンドはUNIXのcrontab なのですが・・。 また、perlスクリプト内以外でシェルコマンドを実行する方法はあるのでしょうか?? どなたか分かる方いらっしゃいましたらご教授いただけると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • コマンドプロンプトからperlを実行できません

    エディターで作成した者を、ex1.plとtxt形式で保存し、それをコマンドプロンプトでperl ex1.plとやってもCan't open perl script;No such file or directory と出てきてしまいます。 この原因は、何なのでしょうか? ちなみに、コマンドプロンプトでやるとperl -vと打ちEnterを押すときちんとバージョン情報が出るので、ダウンロードはできていると思います。 ダウンロードしたのは、Active perl 5.8.7Build813で、現在XPを使っています。 プログラミング初心者なので、わかりにくい文章で申し訳ないですが、教えて下さい。

    • ベストアンサー
    • Perl
  • PHPスクリプトでperlスクリプト

    はじめまして。PHP初心者です。助け舟をお願いします。 PHPスクリプトで、formの表示からデータの受け取り→ファイルに書込み→終了画面の表示ができるスクリプトを書くことが出来ました。 これをphpスクリプト1とします。 POSTで受け取った変数を元に処理した変数を返すperlスクリプトがあります。 これをperlスクリプト1とします。 perlスクリプト1をphpスクリプトにすることは私には困難なため、phpスクリプト1のファイルに書き込む前に、perlスクリプト1を実行→返った変数をphpスクリプトで使用しファイルに書込み→終了画面の表示を行いたいです。 こんなことってできますか?

    • 締切済み
    • PHP
  • パールが実行されない!!

    パールを実行させようとしたのですが、以下のような結果がブラウザで返されてしまいます。 Method Not Allowed The requested method POST is not allowed for the URL /aaa/bbb/ccc/ddd.pl. そこで、元々のHTML内のPOSTをGETに変えてみたところ、今度はddd.plを上記から実行するか、保存するかのダイアログが出てきてしまいます。 <FORM method=POST onsubmit="return check()" action="../../cgi-bin/ddd.pl">               ↓ <FORM method=GET onsubmit="return check()" action="../../cgi-bin/ddd.pl"> サーバー側のパールの設定(パールが動作しない等)なのでしょうか?