わたしはあるインターネットのスクールに通っていたのですが
パスについて頭が混乱しています。
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)では動作しないのですか?
パスの根本的なところを知りたいです。
どなたか教えていただければ幸いです。
No.2ベストアンサー
- 回答日時:
話が専門的になりますがお覚悟を。
一応環境として、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のファイル管理システムを勉強されることをおすすめしますが。
この回答への補足
ご回答有難うございます。
あともう少し教えていただけますでしょうか。
”<IMG>タグのSRCで指定するパスは全てURL指定”との事ですが、<FORM>タグのACTIONや<A>のHREFでCGIを呼び出すときも同様と考えてよろしいのでしょうか?
よろしくお願い致します。
ご回答ありがとうございます。
すべてを理解することは今の私では難しいですが、
今回とてもためになりました。
もう少し勉強してみようと思います。
ありがとうございました。
No.4
- 回答日時:
>、<FORM>タグのACTIONや<A>のHREFでCGIを呼び出すときも同様と考えてよろしいのでしょうか?
http上で呼び出すものは全てURL指定です。
ただし、CGI(perlスクリプトなど)の中からカウンタのデータを
呼び出す場合などは違います。http経由ではないですから。
ようするにブラウザ側でなにか実行したりするものがURL指定なのです。
No.3
- 回答日時:
あぁ~今はそんな講座があるんですね。
個人的にはお金を払って覚えるようなものではないと
思うんですが、まぁそれはどうでもいいことですね。^^;
・URL指定
httpで呼び出す時の場所指定。
・絶対指定
パスを頭から全部書くもの。
URLなら「oshiete.goo.ne.jp」とサーバー名から、
telnet、ftpとかなら「/」から始まるもの。
・相対指定
現在いる場所から戻ったり、現在地の中から先の場所。
URLなら「../」とか「cgi-bin/count/」、
telnet、ftoなども同様。
cockyさんが詳しく書いてらっしゃいますが、もちょっと
簡単に言うと
「/usr/home/~」はwebサーバーで公開されているディレクトリ
ではないから「/~s100000/~」と書く必要があるということです。
その理由は「一般公開したくない場所まで公開することになる」
というセキュリティ上の問題。もちろん「/usr/home~」から公開
することも可能ですがセキュリティ上好ましくありません。
なんとなくわかっていただけましたか? さらに詳しいことが
知りたい場合はApache関係のサイトを見たりするといいかも。
参考URL:http://www.apache.or.jp/jdocs/conf/documentroot. …
No.1
- 回答日時:
よくわかんないです。
しかし、その一だと、相対パスになってしまいませんか?
カウンターを表示する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のように書けばよいのでは?
うーん。私、思い違いをしていますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- その他(コンピューター・テクノロジー) <a href="file:///フォルダ名/ファイル名">リンクテキスト</a>について 1 2023/04/06 22:40
- UNIX・Linux デフォルト値のパラメータ展開 1 2022/08/12 17:34
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
apacheでPerl CGIが作動せず、5...
-
POSTメソッドの最大容量について
-
ホームページにメールフォーム...
-
ホームページでCGIのフォームを...
-
CGIって何ですか?簡潔に教えて...
-
cgiの注釈が出来ない
-
CGI.pmはもう古い!?
-
フォームを再送信しますか?
-
入力フォーム(電話番号)
-
プロバイダのスピードは、maps...
-
3DCG
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
-
サーバーのエラーでおしえてく...
-
ホームページの事でおしえてく...
-
さくらサーバーにcgiフォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
bashシェルスクリプトで空白が...
-
シェルスクリプト(Linux)【初心...
-
CGIでの環境変数PERL5LIBの設定
-
500エラーorダウンロードになる...
-
シェルスクリプトの記載方法
-
パールスクリプトを呼び出すと...
-
~/.bashrcを間違えて保存してし...
-
eclipseでC言語がコンパイルで...
-
pythonのエラーについて
-
scpコマンドでリモートサーバの...
-
書き込み権限が無いためコピー...
-
Viで書き込もうとすると、保...
-
/ が何時の間にか「Read-only f...
-
コマンド終了ステータス
-
/etc/passwd と /etc/shadowを...
-
FTPコマンドの戻り値について
-
DOSコマンドでのワイルドカ...
-
rcpコマンドについて、教えて!
-
Illustratorのデータをまとめて...
-
IBM漢字コードのSJIS変...
おすすめ情報