中小企業のどんな悩みにも寄り添って一緒に解決する愛知県の経営コンサルタント

メニュー

違いを説明できますか?「フルパス」「絶対パス」「相対パス」の違い

最終更新日:

公開日:2014年03月25日

その他

どうも、くーへいです。

今日は、WEB制作者が良く使う言葉の解説として、「フルパス」、「絶対パス」、「相対パス」の違いをまとめてみたいと思います。
皆さんは、その違い、分かりますか?

違いを簡単にまとめると・・・

最初に簡単にまとめると、以下のようになります。
なお例示は一般的な構造がわかりやすいので、勤務先のカタツムリデザイン(http://www.katatsumuri-inc.com/service/homepage.html)をベースとしていますが、サーバー内部のパスはダミーです。
この記事では、公開領域を「/home/katatsumuri-inc.com/www/public_html/」とします。

「フルパス」・・・サーバー内部で、最も上位の階層から参照した際のパス
例)/home/katatsumuri-inc.com/www/public_html/service/homepage.html

「絶対パス」・・・サーバーの公開領域の中で上位の階層から参照した際のパス
例)/service/homepage.html

「相対パス」・・・参照しているファイルから見たパス(例示は/service/内の別ファイルからhomepage.htmlを参照するときのパス)
例)../homepage.html

公開領域について(2014年8月5日追記)

「公開領域についての説明が足りない」というご指摘をいただきましたので、少し踏み込んで説明します。

この記事でいう「公開領域」とは、Apacheで言うところの「DocumentRoot」を指します。
端的にいうと、ブラウザが参照できる範囲が、この「DocumentRoot」以下となります。

「PHP」や「Perl」、「Ruby」はサーバーのもっとも上位にあるフォルダ「/」(「DocumentRoot」よりも上位のフォルダ)を参照できます。

WEB制作における「フルパス」と「絶対パス」の違いとは

一般的にWEB制作者の間で「フルパス」と言われた際は、サーバーの内部で最も上位の階層から参照した際のパスを示すことが多いと思います。
「サーバーの内部で最も上位の階層」とは、サーバーを1つのコンピューターとすると、Windowsでは「C:\」ですし、LINUXでは「/」で示されます。
(Windowsの場合はドライブごとにフルパスが存在することになります)

一方で、「絶対パス」と言われた際は、サーバーの公開領域の中で上位の階層から参照した際のパスを示します。
「サーバーの公開領域の中で上位の階層」とは、「/」を指します。

ここで注意したいのは、「フルパス」における「/」と、「絶対パス」における「/」は意味が違うということです。

通常、WEB制作者がコーディングの際に使うのは「絶対パス」における「/」でしょう。
上記の例でいえば、単に「/」と指定することで、「http://www.katatsumuri-inc.com/」を指定したことと同じ意味になります。
「/service/」と指定することで、どのファイルから参照しても、「http://www.katatsumuri-inc.com/service/」を指し示しているとサーバーは解釈します。
これは、内部的には「/home/katatsumuri-inc.com/www/public_html/」を「/」と書き換えているにすぎません。

では、「フルパス」はどうかというと、「/」とすると「絶対パス」の「/home/katatsumuri-inc.com/www/public_html/」ではなく、一文字目の「/」を指していて、全く別のフォルダを指し示すこととなります。

ここで、疑問となるのが、どういうときに「フルパス」と「絶対パス」の違いを判断するのかということでしょう。
それは、それを指定しているファイルの違いです。

「HTML」や「CSS」はあくまでサーバーの公開領域内でのみ参照でき、参照されます。
他方、「PHP」や「Perl」、「Ruby」はサーバーの公開領域よりも上のファイルを参照したり、参照されたりできます。

つまり、「HTML」や「CSS」内には「フルパス」は指定できませんし、「PHP」や「Perl」や「Ruby」および「.htaccess」では「絶対パス」は使えません。
「相対パス」は「HTML」や「CSS」、「PHP」や「Perl」や「Ruby」および「.htaccess」はいずれも同じ意味を持ちます。
ただし、「HTML」や「CSS」では相対パスであっても公開領域外のファイルは参照できません。

ちなみに、WEB以外の世界では、「フルパス」と「絶対パス」は同じものを指します。
「公開領域」という特殊な環境があるために区別された、WEB独特の違いなのです。

「フルパス」を取得するための記述方法

「フルパス」は公開領域よりも上のファイルを参照しますが、公開領域が「フルパス」で書くとどういったパスになるのかは調べるのが困難です。
その際は以下のコードで取得できますので、参考にしてみて下さい。
(PHPコードになります)

<?php
echo __FILE__;
?>

まとめ

検索エンジンで「フルパス 絶対パス 違い」で検索すると、「違いはない」とする記事も多く見られますが、それはWEB業界を除いた話です。
違いは何だろうと疑問を持った方の中には、WEBの話をしている方もいるかと思いますので、その際はこの記事を参考にしてみて下さい。

コメント

2 コメント

  • ばしくし says:

    公開領域??
    確かに公開領域なんですけど・・・ちょっと説明足りなくないですか?

    HTML、CSS、JavaScript、PHP等の「静的ファイル」を公開するために配置する場所は
    httpd.confでいう「DocumentRoot」で定義します。

    PerlやRubyやPython等の「動的ファイル」を公開するために配置する場所は
    httpd.confでいう「ScriptAlias」「WSGIScriptAlias」等で定義します。

    動的ファイルであるスクリプトは
    スクリプトの内部で、include,use,import,require等(言語により文法が違います)を実行することにより
    スクリプトのライブラリパスに配置されているファイルを動的にロードすることが可能であるため
    読み込み権限のある任意のファイルの実行が可能となります。

    スクリプトの権限については、スクリプトを実行する実行ユーザ(Webサーバの実行ユーザ)のパーミッションの関係になります。

    静的ファイルは、そのままHTMLのコードをブラウザへ返すことでレンダリングとなります。
    ※所詮、CSSファイルはstyleタグの中身、JavaScriptファイルはscriptタグの中身に過ぎません。ブラウザの行う解釈は、あくまでHTMLです。

    動的ファイルは、サーバ上の標準出力へHTMLのソースコードを出力することによってレンダリングとなります。
    よって、レンダリングする標準出力の中に
    JavaScript(scriptタグ)やCSS(styleタグ)、および、DocumentRoot上の各種静的ファイル(JavaScript、CSS、gif、jpg等)の読み込み
    を直接書き込むことも可能です。

    • くーへい says:

      ばしくしさんコメントありがとうございます。

      公開領域については確かに説明不足かな、と思いましたので追記しました。

      コメント中にある「ScriptAlias」「WSGIScriptAlias」等については、あくまで実行権限を与えるフォルダを指定するだけだと思います。
      適切な実行権限があれば(httaccess等でも権限は追加できるはずです)どのフォルダにおいても問題ないという認識ですが、いかがでしょうか?

Leave a Reply

Your email address will not be published.

関連記事

ご相談受付中です IT・DX・SEO・経営・・・幅広く中小企業のお悩みに寄り添います

スポンサードリンク