CGIのURLが http://example.com/test/test.cgi
だったとして、自身のURLのパス部分(http://example.com/test/)を出すには
どのようにしたらいいでしょうか。
CGIモジュールでURLを取得して
最後の/まで切り取る方法もあるかと思いますが
そのURLを取得するのと同じくらい、スマート?に出来ないでしょうか。
アドバイスのほどよろしく御願いします。
No.4ベストアンサー
- 回答日時:
Perlを使用しているなら File::Basename モジュールを使用すれば
簡単にパスを取得できます。
use File::Basename;
my $url = 'http://example.com/test/test.cgi';
my $base = (fileparse($url))[1];
print $base;
File::Basename モジュールは標準モジュールなので標準ロケールさえ
インストールしないような特殊な環境でない限り利用できるはずです。
ありがとうございます。
ファイル名を除くには、そのような方法もあるのですね。今後の参考になります。
File::Basenameですか、勉強しておきます。
No.5
- 回答日時:
No.3
- 回答日時:
概ねANo.2さんの回答で問題ないと思いますが、ポートが80番以外の
http://www.example.com:8080/path/to/cgi/foobar.cgi
みたいなURLだと、ポート番号が取れないですね。
もうちょっと正確にするなら、CGI自身のURL取得は
my($url) = 'http://'.$ENV{SERVER_NAME}.($ENV{SERVER_PORT} != 80 ? ":$ENV{SERVER_PORT}":'').$ENV{SCRIPT_NAME};
って感じになります。
あとは、ANo.2と同じように、末尾の/以降を削除すれば、URLのパス部分が取得できます。
ありがとうございます。
今回の、スマートにというのは、モジュールを使わない。という意味ではなく
例えば、
http://www2u.biglobe.ne.jp/~MAS/perl/waza/cgiurl …
のような感じで、mtaka2さんのご回答いただいた内容と同じようなものが
取得できるのですが、これくらい簡単に(一発で)
ファイル名を除くURLが取得できるものは無いのか。と思ったのです。
ただ、mtaka2さんのご回答いただいたもので、/以降を削除すれば
目的は得られるので、十分です。ありがとうございました。
No.2
- 回答日時:
$ENV{HTTP_HOST} で取り出すことができます。また、/test/test.cgi の部分は $ENV{SRCIPT_NAME}
で取得ができます。
$url_path = "http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}";
$url_path =~ s#[^/]+$##;
No.1
- 回答日時:
環境変数 $ENV{'SCRIPT_NAME'}にそのCGIをHTTPサーバー利用する場合の名前が入っています。
一方、環境変数$ENV{'SCRIPT_FILENAME'}には、そのサーバー上の名前が入っています。たとえば、
/
|-- /cgi-bin
| |--/usernasme
| | |-- /test.cgi
|-- /home
| |-- index.html(A)
というサーバーの構成で、HTTPサーバーからは、
|--/username
| |-- index.html(A)
| |-- /cgi-bin
| | |-- test.cgi
とされている場合、
たとえば、
$ENV{'SCRIPT_NAME'} = /username/cgi-bin/test.cgi
$ENV{'SCRIPT_FILENAME'}} = /cgi-bin/test.cgi
が入っています。
わかりやすい書き方をすると
$HTTP_RUTE = $ENV{'SCRIPT_NAME'};
$HTTP_RUTE =~ s/(\/.+\/)(\w+\.cgi)/$1/;
とか・・
この回答への補足
すみません。
$HTTP_RUTE = $ENV{'SCRIPT_NAME'};
$HTTP_RUTE =~ s/(\/.+\/)(\w+\.cgi)/$1/;
とすると、/***.cgiのようになりましたが。
私が取得したいのは、ファイル名を除くURLなんです・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- CGI サイト訪問者の情報を取得したい 1 2023/02/21 11:03
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- その他(職業・資格) 日経TESTで600点以上を最短で取得するにはどうしたら良いでしょうか?どなたか勉強方法教えてくださ 1 2023/01/28 20:50
- CGI htmlからcgiを自動的に起動させたい 1 2023/02/21 19:39
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バイナリファイルのアップロード
-
CGIの中にinclude
-
perlのrequireの動き方について...
-
perlをインストールしたのに使...
-
htmlファイルへのcgiの組み込み...
-
月の第一週とは
-
6月の第2 第4火曜日は何日...
-
よくある 『 第○(1・2・3・4・...
-
VBAでExcelのヘッダーに文字列+...
-
毎○曜日って、使いますか?
-
燃えるゴミの日は何曜日ですか?
-
TCPヘッダのチェックサム算出方法
-
エクセルで毎月第2週日の水曜日...
-
FORMのFILEでフォルダ(ディレ...
-
HTMLでASPを動かしたい
-
[Excel] ある日の曜日が当月の"...
-
曜日と曜の使い分けがわかりま...
-
エクセルで相対パスの書き方を...
-
[C#]ListView一覧表示時の幅設...
-
曜日を求めるプログラムはどう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cgiとplとpm
-
perlのrequireの動き方について...
-
jcode.plが読み込めない
-
Quantifier follows nothing in...
-
require文が実行できない
-
ファイル書込時にPermission de...
-
useとrequireでエラー
-
htmlからテキストを返すperlを...
-
Perlのデバッグ方法って。。。...
-
PDFJが動作しない
-
画像のURLの変数を別のCG...
-
perlのcgiで、変数の中身を表示...
-
perlをインストールしたのに使...
-
CGIの中にinclude
-
gifcat.pl:助言お願い致します
-
phone.plというモジュールを使...
-
Perlの作動不具合、missing bra...
-
プログラムを書き足すことについて
-
Not Found 404エラー時のCGI出力
-
バイナリファイルのアップロード
おすすめ情報