SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.08<<123456789101112131415161718192021222324252627282930>>2017.10
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

以下のようなものを作ってみた。
<?php
function slash($path)
{
return str_replace("\\","/",$path);
}

function abspath($path, $ref=false)
{
if( $ref===false )
$ref = slash(getcwd());
else
$ref = abspath($ref);

$src = split("/", $ref);
$dst = split("/", slash($path));

if( ereg("^[A-Za-z]:$",$dst[0]) ) $src = array();
if( $dst[0]=="" ) { $src = array($src[0]); array_shift($dst); }

foreach($dst as $dir)
{
if( $dir=="." ) continue;
else if( $dir==".." ) array_pop($src);
else array_push($src, $dir);
}
$abs = implode("/",$src);
if( ereg("^[A-Za-z]:$",$abs) ) $abs.="/";
return $abs;
}

function relpath($path, $ref=false)
{
if( $ref===false ) $ref = getcwd();

$src = split("/", ereg_replace("/$","",abspath($ref)));
$dst = split("/", abspath($path));

while( count($src)>0 && count($dst)>0 && strtoupper($src[0])==strtoupper($dst[0]) )
{
array_shift($src);
array_shift($dst);
}
foreach(array_keys($src) as $i) $src[$i] = "..";
$rel = implode("/", array_merge($src,$dst));
if( $rel=="" ) $rel = "./";
return $rel;
}

function uri($path, $server=false, $option=array())
{
$uri = "/".relpath($path, $_SERVER["DOCUMENT_ROOT"]);

if( $server )
{
$scheme = isset($option["scheme"]) ? $option["scheme"] : "http";
$host = isset($option["host"]) ? $option["host"] : $_SERVER["SERVER_NAME"];
$port = isset($option["port"]) ? $option["port"] : "80";
if( $port=="80" ) $port = ""; else $port = ":".$port;

$uri = "$scheme://$host$port$uri";
}
return $uri;
}
?>



abspath関数が絶対パス、relpath関数が相対パスを取得するもの、そしてuri関数がURIを取得するものである。

絶対パスは組み込み関数にrealpathがあるが、これは実際に存在していないとFALSEが返る。
このabspathはカレントパスを基準に".."や"."を処理するため、存在していなくてもパス名を取得できる。また、省略すればカレントパスからだが、基準となるパスも指定できる。

※2009/12/9追記 関数仕様などをWikiにまとめた。

テーマ:PHP - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。