• ベストアンサー

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)

回答No.3

・・・弱そう >開発環境を作ろうとしている じゃあ、エンジンだけでやればいいじゃん。 perl スクリプトファイルで出来るでしょ? やれよ。SETコマンド使って。

Nrt_Tsyk
質問者

お礼

初心者の愚問で皆さんを煩わしたと思われます。 御容赦ください。 ありがとうございました。

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.2

localhostというのは特別な名前なアドレスです。 http://ja.wikipedia.org/wiki/Localhost サーバー環境の整っていないマシンではアクセスできないだけで、システム自体には既に設定してあるはずです(ちなみにその設定は、例えばWindowsXPやVista(などのNT系)ならC:\Windows\System32\drivers\etcの中のhostsファイルにしてあります。それがNo1さんのおっしゃるhostsです。 ということで、まず参考書に載っていると思うので、ローカルなサーバー環境を構築してください。おそらくApacheかAN HTTPDあたりが紹介されていると思います。 ちゃんと環境を整えたら、サーバーで設定したローカルのルートディレクトリに http://localhost/ でアクセスできるようになっているはずです。 ちなみにあまり関係ないかもですが、localhost等の一般的にアドレスと呼ばれているものは、ただのIPアドレスの別名です。例えばlocalhostならIPv4アドレスなら127.0.0.1です。なので http://127.0.0.1/ としてもアクセスできます。

Nrt_Tsyk
質問者

お礼

ありがとうございました。 まだ基本的なことがわかっていないと反省しました。 あらためて参考書を見渡すと、Perlも奥の深い言語です。 CGIをいくつか作ったくらいでは、ごく初歩的な機能を使っているに過ぎないと思いました。

Nrt_Tsyk
質問者

補足

Apacheサーバ,Perlエンジンをインストールしたサーバマシンとは別のPerlエンジンだけをインストールしたクライアントマシン上で、Perl版通信プログラムの開発環境を作ろうとしているしだいです。この辺で既に基本的な初心者的誤解があるのでしょうか? クライアントマシンにはApacheのhtdocsフォルダがないので、http://localhost/パールのスクリップ・ファイル名、という指定は無意味なわけです。はたしてどのようにURL欄に、あるいはAction設定に入力したらいいのかわからないのです。  

回答No.1

localhostはhostsに存在しますが何か?

Nrt_Tsyk
質問者

お礼

初心者の愚問で皆さんを煩わしてしまったようです。 質問の仕方自体が初心者レベルでした。 お詫びとお礼を申し上げます。 とてもありがたい助言を沢山いただきました。次の質問は、回答しやすい質問を目指します。

関連するQ&A

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

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

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

    ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません 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スクリプトを実行する際に、 まず、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スクリプト内でシェルコマンドを実行するには??

    タイトル通りなのですが、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
  • 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
  • PHPスクリプトでperlスクリプト

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

    • 締切済み
    • PHP
  • Perlスクリプトを一定間隔で自動実行

    Apache2.0.63+ActivePerl5.8.8.822を自宅サーバ(Windows XP Pro SP3)にて運営しています。 自宅サーバ内に、外部ウェブサイトのデータを取得するPerlスクリプトrecord.plを置き、 これを一定間隔で自動実行させたいと考えています。 そこで、record.plまたはそのショートカットをWindowsのタスクに登録してタイマー起動させてみました。 確かに一定間隔で自動実行されますが、実行の際に毎回必ずコマンド画面が立ち上がって来るので、これは嬉しくありません。 コマンド画面が立ち上がらない方法として、record.plをApacheのCGIとして実行することを考えました。 自宅サーバ自身からApacheに対してhttpリクエストを定期的に送る方法ということで、色々調べてみると、 以下のコマンドでtelnetを使ってhttpリクエストが送れるということまではわかりましたが、 -------------------------------------------------------- Microsoft Telnet> set local_echo(Enter) Microsoft Telnet> set codeset Japanese EUC(Enter) Microsoft Telnet> open 127.0.0.1 80(Enter) GET /currency/record.pl HTTP/1.1(Enter) HOST: 127.0.0.1 80(Enter) (Enter) -------------------------------------------------------- これをどうすれば自動実行できるのかがわかりません。 telnet以外にhttpリクエストを送る方法があるのなら、それでも構いませんし、 上記2つの方法以外でrecord.plを一定間隔で自動実行できるなら、それでも構いません。 コマンド画面が立ち上がらずに、自宅サーバのみでrecord.plを定期的に自動実行できる方法があれば教えてください。 よろしくお願いします。 <record.plのパス> 内部パス:D:/cgi-bin/currency/record.pl URL(仮):http://xxx.ddo.jp/currency/record.pl (ScriptAlias使用)

専門家に質問してみよう