2

絶対または相対ローカルパス (たとえば./images/Mafalda.jpg) を対応する絶対 URL にマップするための高速で信頼性の高い方法が必要です。これまでのところ、これを思い付くことができました。

function Path($path)
{
    if (file_exists($path) === true)
    {
        return rtrim(str_replace('\\', '/', realpath($path)), '/') . (is_dir($path) ? '/' : '');
    }

    return false;
}

function URL($path)
{
    $path = Path($path);

    if ($path !== false)
    {
        return str_replace($_SERVER['DOCUMENT_ROOT'], getservbyport($_SERVER['SERVER_PORT'], 'tcp') . '://' . $_SERVER['HTTP_HOST'], $path);
    }

    return false;
}

URL('./images/Mafalda.jpg'); // http://domain.com/images/Mafalda.jpg

期待どおりに動作しているようですが、これは私のアプリにとって重要な機能であるため、見落としている可能性のある問題を誰かが見つけられるかどうかを尋ねたいと思います。また、この機能をそれぞれ数回使用するため、最適化も歓迎しますリクエスト。誰?

4

2 に答える 2

1

注意すべき潜在的な問題の1つは、シンボリックリンクです。DOCUMENT_ROOTにシンボリックリンクである部分が含まれている場合、物事は爆発します(realpath()がそのシンボリックリンクを展開するため)。

もちろん、解決策は、realpath()で$_SERVER['DOCUMENT_ROOT']をラップするのと同じくらい簡単かもしれません。

于 2010-05-02T22:42:06.230 に答える