CGIさまの偉大な権限

相対パスの出番だぜ

前へ 次へ トップに戻る

さて、ここまで理解しておけば、もうバッチリでしょうか。
いや、もうひとつ疑問点が残っていました。

前ページまでの研究結果(って程じゃないか)を踏まえ、

過去ログ機能のある掲示板で、
過去ログパスをhomepage下のpastlogなどに決め、
CGIには"http://homepage?.nifty.com/pastlog"と、URLパスで指定して
書き込みに行ったところ、

Can't write "http://homepage?.nifty.com/pastlog/*****"

なーんていうエラーメッセージが出てしまったのです。(ちとうろ覚え)

???・・・なんで?

指定したパス、パーミッションなどをチェックしてみましたが、間違いはないようです。うーーん、わからん???

「悩んだ時は初心に帰れ」と、死んだじいちゃんが言ってた(ほんとか?)ので、もう一度、戻っておさらいしてみます。

FTPソフトからはこう見えていても、ブラウザから見に行く時には、URLアドレス自体が違うので、それぞれがサーバーも違うまったく独立したサイトとしてしか見えない。
そこで、homepageの中のファイルからcgi-binの中のファイルを読みに行ったりするには、"http://"から始まる、絶対的なURLパスで指定して読みに行かなければ見えない・・・、見えない・・・見えない・・・んん???

「見ると書くとは大違い」ってか?

「サーバーの違うまったく独立したサイト=人様のサイト」に、勝手に書き込みに行けたりしたら大変じゃんか!
パーミッションもなにも、たまたまその人が、自分と同じような掲示板を設置してたりしたら・・・掲示板荒らしなんてもんじゃないぞ!

そりゃそーだよな。もし、そんなことが簡単に出来たら、ネット社会は壊滅するよなー。いやー危ない危ない・・・まあこれで、破滅は免れたわけだ。めでたし、めでたし・・・おしまい。

ああっ、そういう問題ぢゃなかった・・・ええっ?てことは?

@homepageでは過去ログ機能は使えない??

ががーーーん(゜o゜;)・・・そ、そんなぁ・・・・(T_T)
ここまで真面目にヤクルトタフマン切磋琢磨してきた時間と労力は?
ついでに、課金と電話代も返してくれえーーっ(T^T)

ということで、今から突然、あてのない旅に出ることにしたので、このコーナーは終わりです。いつか何処かで見掛けても声をかけないで下さい。
ではでは、皆さん、おげんきよう・・・・

 

あれっ? なんだこれ?

こ、この意味は?


マジソンバッグにハンカチとちり紙を詰めながら、ぼんやりとパソコン画面に目をやると、

## 過去ログ設定
$past_dir = ".";      # 過去ログのあるディレクトリ(フルパスだと / から)
$past_url = ".";      # 過去ログのあるURLディレクトリ
# (フルパスだと http:// から)
---- KENT WEB light2.cgi より抜粋 ---

「過去ログのあるディレクトリ」と「過去ログのあるURLディレクトリ」とは、何が違うんでしょう?
また、フルパスでの表記法が違うのはどういう意味でしょうか?
うーむむ、ここはひとつ、"$past_dir"と"$past_url"という2つの変数が、それぞれどんな用途に使われているのか、ソースの中を眺めてみよう・・・。

おおっ、ふむふむ、へえーっ、(中略)、なんとっ!

"$past_dir"は、CGI自身が参照または書き込みに、
"$past_url"は、<FRAME SRC="">などとして、ブラウザに参照させに行っているようです。・・・てことは、もしや?

$past_dir = "../homepage/pastlog";
$past_url = "http://homepage?.nifty.com/*****/pastlog";

まさかと思いつつ、こんな風に相対パスで設定してみると・・・

で・き・た・・・・・\(^O^)/

なんと、URLが違うという時点で、まったく別のサイトと思われていた2つのディレクトリが、CGI自身からだけは、FTPソフトで見えた通りに、ちゃんと隣りのディレクトリであることを認識していたのです。
そして、URLでなく、相対パスでroot 配下をまたいで行く限り、CGIには、偉大なる「書き込み権限」が与えられていたのです。

うーむ、恐るべしCGI・・・いや、今日からCGIさまと呼ばせていただきます。

また、上記ではCGIファイルを/cgi-bin/直下に置いた場合の指定法ですが、これではCGIファイルの置き場所(階層)が変わる度に、相対パス指定をいちいち変更しなきゃいけませんねー。
これが"/"で始まるルートからの絶対パスで指定できれば・・・

$past_dir = "/homepage/pastlog";
$past_url = "http://homepage?.nifty.com/*****/pastlog";

あ、できるじゃねーか・・・ o(~O~)o

それにしても、またしても答えはマニュアルまたは注釈の中に隠されてたわけですなー。
なんだかんだ言いつつ、
「TVチャンピオン/第一回取説読まない王選手権」の座はもらったか?(笑)


前へ 次へ トップに戻る

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!