我有一个如下所示的数组:
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]是遥远的。有没有办法做到这一点?
答案 0 :(得分: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;
}
}
答案 1 :(得分:2)
最简单的方法是搜索双斜杠。虽然在相对路径中有效,但它会在一段时间(任何域或IP),GET变量(.js?variables//
)或其他路径(js/path//to.js
)之后出现。以下代码说明了这些。
foreach ($array as $path) {
if (strpos($path, '//') >= max(strpos($path, '.'), strpos($path, '/'))) {
#absolute!
} else {
#relative!
}
}
答案 2 :(得分:0)
给了这个想法。这是我的解决方案:
function isLocal($path) {
return preg_match('~^(\w+:)?//~', $path) === 0;
}
虽然file:///path/to/my/file
会失败(应该返回true
),但我现在还不确定我是否关心这个案例。
答案 3 :(得分:0)
这很旧,我知道。
我认为检查路径是否为本地的最好方法是简单地检查其是否存在:)
例如:
if (file_exists($path)) {
unlink($path);
} else {
// delete remote file
}