相対パス、絶対パス&URL(付バーミッション)

HTMLと違ってCGIの設置で一番困るのは
バーミッションの変更と相対パス、絶対パスの記述方法だと思います。

◎相対パス指定



相対パスとはある位置から目的のファイルを見た場合の相対的な関係を表します。
たとえば、トップページ(index.html)から同じ階層デレクトリーにある画像(gazou.gif)をリンクする場合
<a href=http://www.kkk.ne.jp/gazou.gif>
とURLを書いてリンクする方法と、同じデレクトリーにあるので
<a href=gazou.gif>
とURLは省略して画像名だけでリンクする方法があります。
つまり同居している自分の家族を特定するのに住所や苗字までつけて呼ぶ必要はないのと同じです。
しかし、パソコンのブラウザがファイルをサーバーに要求しに行く時に、相対パスは存在しません。 相対的な位置関係とみなして、URLに自動で変換してくれてるだけの話なのです。
「パス」は「ファイルの住所」で 「階層」というものを基本として記述されています。
「ウインドウズ」ならば「エクスプローラー」を「マック」なら「リスト」を表示してみると。  フォルダ内にファイルが保存されていたりして、それが「階層」になっていることがわかります。
相対パスは、「自分を中心とした記述」の方法です。
 ここで自分っていうのは、画像を呼び出すHTMLファイルであったり、リンク元のファイルのことです。
 では実際に、相対パスの記述法を実検して説明します。
たとえば、画像を呼び出すときを例にHTMLファイルからみて、呼び出す目的のファイルがどこにあるのかで記述の仕方がかわり、以下3つになります。

@同じフォルダ(カレントディレクトリ)にあった場合
 記号を使わずファイル名だけを記述します。
 また「./」フアイル名としても結構です。
count.dat または ./count.dat
と書きます、つまり「./」とはこのディレクトリという意味です

A上のフォルダにあった場合
 上のフォルダ(階層)においてあるところを指定するには「../」と記述する。
 階層をみるとわかりますが、「上のフォルダ(階層)」はひとつしかないので
 上を指定するときは、上であることを指定する「../」を記述して
 そのあとにファイル名を記述し
  ../count.dat
と書きます
つまり「../」とはこの上ディレクトリという意味です
仮に2つ上の階層にあったときも「../」を2回、3つ上なら3回記述して、
 そのあとにファイル名を記述します。
../../count.dat
と書きます

B階層が下位ディレクトリ(下のフォルダ)にあった場合
「フォルダ名」をまず記述し、そして「/」のを記述してファイル名を記述する。
data/count.dat
または
 ./data/count.dat
です、階層が2つ下のディレクトリの時は
data/guest/count.dat
    または
 ./data/guest/count.dat
   です
Cちょっと応用をして。すぐ直下のフォルダにファイルが保存されていた場合に  2つしたのフォルダのなかのファイルを指定するパスは、  上にいって下にいくというような場合もあるわけで。
例として図のフォルダの位置への相対パスは
上にいって上にいって、下だから、../../a2/と成ります。

(問1)カレントディレクトリがBのときEはどう表すか。
 [/]_____[A]____[B]___C
    |    |
    |    |__[D]___E
    |
    |___[F]___[G]___H

 (答えはキーボードのCtrlとAを同時に押してください。)../D/E

(問2) 下図の赤色「G」から見て「D」を表すには

(答えはキーボードのCtrlとAを同時に押してください。)../../B/D

◎絶対パス指定


また、絶対パスにはインターネット上でのフルパス(URL)とコンピュータ上での絶対パスがあります。
この二つは他のサポートサイトでも混同されて説明されているのを見かけますが、CGIを触るからにはしっかり理解しておく必要があります。
困ったことに絶対パスはサーバによって異なり、サーバの仕様書とか、プロバイダーに問い合わせるとかしなければなりません。
ここに、絶対パスを見つける便利な方法があります。

★「スタート」→「すべてのプログラム」→「アクセサリ」→「メモ帳」
メモ帳を開いてつぎの枠内のテキストをコピーして貼り付けます。

#!/usr/local/bin/perl
print qq|Content-type: text/html\n\n|;
print qq|$ENV{'SCRIPT_FILENAME'}|;

貼り付けたら、「名前をつけて保存」
場所(任意)は「FTTPのあるデレクトリー」、
ファイルの種類は「すべてのファイル」
ファイル名(任意)は「xxx.cgi
ファイルが出来上がったら、サーバにアップロードして実行してみましよう。
仮にプララサーバ「http://cgi++.plala.or.jp/ユーザ名」にて実験すると
絶対パスは「/home/ユーザ名 」 であることがわかります。
また、http://ユーザ名.k2.xrea.com/cgi-binでは
「/virtual/ユーザ名/public_html/cgi-bin 」となります。
このようにpublic_html 配下の index.cgi に対して絶対パスを指定する場合には、
/home/<ユーザー名>/puclic_html/index.cgi
なお、puclic_html/cgi-bin 配下の index.cgi を指定したい場合には、
/home/<ユーザー名>/public_html/cgi-bin/index.cgi
となります。

◎バーミッションの指定


CGIはHTMLと違って第三者がファイルを操作(掲示板等に書き込み)することができます。
もし、悪意を以って操作されたら本来の目的から逸脱したり、サーバに負担がかかったりします。
かといって第三者の操作を封じたらCGIの意味は全くなくなります。
そのような危険がある理由で専用のレンタルCGIを用意することで設置を許可していないサーバもあります。
設置したCGIファイルの属性を変更することで書き込み、読み取り、実行の権限を目的にあわせてある程度制限できます。
ファイルをFTPでアップロードしてサーバー側でファイルを右クリックします。

属性変更(A)


Unix(Linux)ではファイルに対する読み出し/書き込み/実行の可否を8進数(0〜7)の数字で表現します。
具体的には、読み出し/書き込み/実行の可否を3桁の2進数で表したものを1桁の8進数で表現しています。
読み出しをr(Read)、書き込みをw(Write)、実行をx(eXecute)の文字で表現することもあります。
オーナー、グループ、その他の3部門についてそれぞれ
呼び出し(4)、書き込み(2)、実行(1)の権限を設定します。
例えば、オーナー(管理者)に関してすべてを許可する場合(4)+(2)+(1)合計(7)
    ついでグループはすべて禁止(0)、
その他には呼び出し(4)と実行(1)を許可して(5)をそれぞれ指定して
総合で705のように設定します。
それぞれ下のようになります。

  文字   2進   8進        意味
  ---   000   0    読み出し、書き込み、実行のいずれも不可
  --x   001   1    読み出し、書き込み不可、実行可能
  -w-   010   2    読み出し不可、書き込み可能、実行不可
  -wx   011   3    読み出し不可、書き込み、実行可能
  r--   100   4    読み出し可能、書き込み、実行不可
  r-x   101   5    読み出し可能、書き込み不可、実行可能
  rw-   110   6    読み出し、書き込み可能、実行不可
  rwx   111   7    読み出し、書き込み、実行すべて可能

この8進数の数字を3桁並べたものがファイルやディレクトリの属性となります。
3桁並べるのは、それぞれ自分自身、同グループの他ユーザ、他グループのユーザ に対する読み書き実行の可否を表しているものです。

その数値はCGIのレンタル先に説明されていたり、プロバイダーで決められています。
普通CGIフアイルに関しては705又は755(上図)とするとOKのようです。
   
続相対パスの設定


[PR]車のドレスアップ代を稼ぐ:携帯で1日1万円収入も可能です