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(应该返回true),但我不确定我现在是否关心那个案例。

于 2013-08-31T21:06:17.363 回答
0

这是旧的,我知道。

我认为检查路径是否是本地的最好方法是简单地检查它是否存在:)

例如:

if (file_exists($path)) {
        unlink($path);
    } else {
        // delete remote file

    }
于 2018-08-09T06:45:28.927 回答