2

シンボリックリンクをたどらずに、ファイルへの絶対パスを取得するにはどうすればよいですか。

例えば

/path/to/some/file
/path/to/some/link -> /path/to/some/file
/path/to/some/directory/

/path/to/some/directory/私の現在の作業ディレクトリはrealpath('../link)です/path/to/some/file

(私realpathはこのように動作することになっていることを知っています)

realpathその代わりに返される関数はありますか/path/to/some/link

4

2 に答える 2

3

David Beckは、PHP マニュアルのコメント セクションで、実際のファイル システムにアクセスせずに相対パス コンポーネントをクリーンアップするソリューションを書きました。残念ながら、彼は関数にステートメントを追加するのを忘れていましたreturnが、それ以外の場合は、これが必要なものであればうまく機能するようです。URL でも動作します。

function canonicalize($address)
{
    $address = explode('/', $address);
    $keys = array_keys($address, '..');

    foreach($keys AS $keypos => $key)
    {
        array_splice($address, $key - ($keypos * 2 + 1), 2);
    }

    $address = implode('/', $address);
    $address = str_replace('./', '', $address);

    return $address;
}

$url = '/path/to/some/weird/directory/../.././link';
echo canonicalize($url); // /path/to/some/link
于 2013-04-03T04:42:13.207 に答える