-PR-
解決済み

パールスクリプトを呼び出すときのパスの指定について

  • すぐに回答を!
  • 質問No.49337
  • 閲覧数83
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 84% (213/251)

わたしはあるインターネットのスクールに通っていたのですが
パスについて頭が混乱しています。
CGIのコースのアクセスカウンターの授業で
ディレクトリ構造が /usr/home/www/s1000000/cgi-bin/counter.pl
となっているパールスクリプトをhtmlファイルのimgタグで呼び出すとき

<img src="/usr/home/www/s1000000/cgi-bin/counter.pl?NAME=username&KETA=4">(その1)
と記述したらうまく動作せず、

<img src="/~s1000000/cgi-bin/counter.pl?NAME=username&KETA=4">(その2)
と訂正され、解決しました。

サーバのローカルルールでホームディレクトリのファイルは/~で呼びだせるように
なっているようなのですが、それならば(その1)と(その2)は
同じことだと思うのです。
パスの相対指定はわかるのですが、絶対指定やurl指定がわかりません。
(その1)は絶対指定で(その2)はurl指定ということなのですか?
(その1)と(その2)の違いは何ですか?
なぜ(その1)では動作しないのですか?
パスの根本的なところを知りたいです。

どなたか教えていただければ幸いです。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル12

ベストアンサー率 57% (232/402)

話が専門的になりますがお覚悟を。
一応環境として、WebサーバにApacheを使っているものとして話します。

そもそも<IMG>タグのSRCで指定するパスは全てURL指定で記述しなければなりません。
で、URL指定でパスが指定された場合に、それをどのように絶対パスに置き換えるかについては、Apacheのhttpd.confで設定された内容によって動作が変わります。

それで、まず~(ティルダ)を使わずにディレクトリを指定すると、URL→絶対パスへの変換の際、自動的にhttpd.conf内のDocumentRootで指定されたディレクトリ名がパスの頭に補完されます。
そのため、仮にDocumentRootに「/usr/home/www」が設定されていたとすると、(その1)の例では絶対パスは「/usr/home/www/usr/home/www/s1000000/cgi-bin~」(長くなるので以下省略)という風に変換されてしまうので、当然「そんなパスは存在しません」ということで、CGIは動作しないわけです。

一方、URL指定にティルダを使った場合は、(厳密にはhttpd.confの設定によるが)通常の場合OSの持つホームディレクトリ情報に従ってURL→絶対パスへの変換を行います。この際DocumentRootによるパス補完は働かないため、(その2)では「/~s1000000」→「/usr/home/www/s1000000」という形で変換が行われ、結果的に狙ったCGIを呼び出すことができたわけです。

細かいことを言えば、URL→絶対パスへの変換や、ティルダ→絶対パスの展開については、httpd.confやOSの設定が大きく関係してくるため、そのへんの設定を変えることによってどうにでも変換方式は変更できます。
ですので、もっと詳細を知りたい場合はWebサーバの設定方法やOSのファイル管理システムを勉強されることをおすすめしますが。
補足コメント
harisun

お礼率 84% (213/251)

ご回答有難うございます。
あともう少し教えていただけますでしょうか。
”<IMG>タグのSRCで指定するパスは全てURL指定”との事ですが、<FORM>タグのACTIONや<A>のHREFでCGIを呼び出すときも同様と考えてよろしいのでしょうか?

よろしくお願い致します。
投稿日時 - 2001-03-09 00:20:16
お礼コメント
harisun

お礼率 84% (213/251)

ご回答ありがとうございます。
すべてを理解することは今の私では難しいですが、
今回とてもためになりました。
もう少し勉強してみようと思います。
ありがとうございました。
投稿日時 - 2001-03-09 12:37:17
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル10

ベストアンサー率 52% (57/109)

よくわかんないです。

しかし、その一だと、相対パスになってしまいませんか?
カウンターを表示するHTMLかなんかのファイルが、
トップのディレクトリ(wwwというフォルダの中?)にあるなら、
多分、二つを絶対パスで書くと、その一は、
http://www.(サーバーホスト名)/usr/home/www/s1000000/cgi-bin/counter.pl?NAME=username&KETA=4
という風に、解釈されて、

その二は、
http://www.(サーバーホスト名)/s1000000/cgi-bin/counter.pl?NAME=username&KETA=4
になると思いますが…。

だからその2のように書けばよいのでは?

うーん。私、思い違いをしていますか?
お礼コメント
harisun

お礼率 84% (213/251)

どうもありがとうございます。
パスって難しいですよね。
もうちょっと勉強しようと思ってます。
投稿日時 - 2001-03-09 12:40:05


  • 回答No.3
レベル9

ベストアンサー率 35% (27/77)

あぁ~今はそんな講座があるんですね。
個人的にはお金を払って覚えるようなものではないと
思うんですが、まぁそれはどうでもいいことですね。^^;

・URL指定
httpで呼び出す時の場所指定。

・絶対指定
パスを頭から全部書くもの。
URLなら「oshiete.goo.ne.jp」とサーバー名から、
telnet、ftpとかなら「/」から始まるもの。

・相対指定
現在いる場所から戻ったり、現在地の中から先の場所。
URLなら「../」とか「cgi-bin/count/」、
telnet、ftoなども同様。

cockyさんが詳しく書いてらっしゃいますが、もちょっと
簡単に言うと

「/usr/home/~」はwebサーバーで公開されているディレクトリ
ではないから「/~s100000/~」と書く必要があるということです。

その理由は「一般公開したくない場所まで公開することになる」
というセキュリティ上の問題。もちろん「/usr/home~」から公開
することも可能ですがセキュリティ上好ましくありません。

なんとなくわかっていただけましたか? さらに詳しいことが
知りたい場合はApache関係のサイトを見たりするといいかも。
お礼コメント
harisun

お礼率 84% (213/251)

なるほど、セキュリティー上の問題があるからなんですね。
そう言われると納得できます。
ありがとうございました。
投稿日時 - 2001-03-09 12:28:53
  • 回答No.4
レベル9

ベストアンサー率 35% (27/77)

>、<FORM>タグのACTIONや<A>のHREFでCGIを呼び出すときも同様と考えてよろしいのでしょうか?

http上で呼び出すものは全てURL指定です。

ただし、CGI(perlスクリプトなど)の中からカウンタのデータを
呼び出す場合などは違います。http経由ではないですから。

ようするにブラウザ側でなにか実行したりするものがURL指定なのです。
お礼コメント
harisun

お礼率 84% (213/251)

これまた納得いきました。
ありがとうございます。
投稿日時 - 2001-03-09 12:34:07
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ