5

次のような配列があります。

Array
(
    [0] => public\js\jade\runtime.js
    [1] => public\js\templates.js
    [2] => public\js\underscore.js
    [3] => public\js\underscore.string.js
    [4] => public\js\main.js
    [5] => //ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
)

これらのファイルのどれがローカルかリモートかを判断する必要があります。つまり、[5] だけがリモートです。これを行う方法はありますか?

4

4 に答える 4

6

でできますparse_url。例:

function is_path_remote($path) {
    $my_host_names = array(
       'my-hostname.com',
       'www.my-hostname.com'
    );
    $host = parse_url($path, PHP_URL_HOST);
    if ($host === NULL || in_array($host, $my_host_names)) {
        return false;
    } else {
        return true;
    }
}
于 2013-08-31T20:58:33.713 に答える
2

最も簡単な方法は、ダブル スラッシュを検索することです。相対パスに含めることは有効ですが、ピリオド (任意のドメインまたは IP)、GET 変数 ( .js?variables//)、または別のパス ( js/path//to.js) の後になります。次のコードは、これらを説明します。

foreach ($array as $path) {
    if (strpos($path, '//') >= max(strpos($path, '.'), strpos($path, '/'))) {
        #absolute!
    } else {
        #relative!
    }
}
于 2013-08-31T20:54:43.030 に答える
0

これを考えてみてください。これが私の解決策です:

function isLocal($path) {
    return preg_match('~^(\w+:)?//~', $path) === 0;
}

file:///path/to/my/file(should return )の場合は失敗しますがtrue、今のところそのケースを気にするかどうかはわかりません。

于 2013-08-31T21:06:17.363 に答える