close
realpath有很多情況不能處哩,所以自己寫了一個路徑修正的程式去配合...
修正一個小錯誤...
function 路徑修正($路徑, $編碼 = false, $調整 = false) {
$陣列 = explode('://', strtr($路徑, '\\', '/'), 2);
if (2 == count($陣列)) {
$前綴 = $陣列[0];
$陣列 = explode('/', $陣列[1]);
} else {
$前綴 = '';
$陣列 = explode('/', $陣列[0]);
}
$路徑 = array();
foreach ($陣列 as $變數) {
$測試 = trim($變數);
if ('..' == $測試) {
if (0 == count($路徑) || '..' == end($路徑) || (1 == count($路徑) && '' == end($路徑))) {
$路徑[] = '..';
} else {
while(1 < count($路徑) && '' == end($路徑)) {
array_pop($路徑);
}
array_pop($路徑);
}
} else if ('.' == $測試 || '' == $測試) {
continue;
} else {
if (false == $編碼) {
$路徑[] = $變數;
} else {
$路徑[] = urlencode($變數);
}
}
}
$路徑 = implode('/', $路徑);
if ('' != $前綴) {
$路徑 = "$前綴://$路徑";
}
if ((PHP_OS == 'WIN32' || PHP_OS == 'WINNT') && '' == $前綴 && true == $調整) {
$路徑 = strtr($路徑, '/', '\\');
}
return $路徑;
}
修正一個小錯誤...
function 路徑修正($路徑, $編碼 = false, $調整 = false) {
$陣列 = explode('://', strtr($路徑, '\\', '/'), 2);
if (2 == count($陣列)) {
$前綴 = $陣列[0];
$陣列 = explode('/', $陣列[1]);
} else {
$前綴 = '';
$陣列 = explode('/', $陣列[0]);
}
$路徑 = array();
foreach ($陣列 as $變數) {
$測試 = trim($變數);
if ('..' == $測試) {
if (0 == count($路徑) || '..' == end($路徑) || (1 == count($路徑) && '' == end($路徑))) {
$路徑[] = '..';
} else {
while(1 < count($路徑) && '' == end($路徑)) {
array_pop($路徑);
}
array_pop($路徑);
}
} else if ('.' == $測試 || '' == $測試) {
continue;
} else {
if (false == $編碼) {
$路徑[] = $變數;
} else {
$路徑[] = urlencode($變數);
}
}
}
$路徑 = implode('/', $路徑);
if ('' != $前綴) {
$路徑 = "$前綴://$路徑";
}
if ((PHP_OS == 'WIN32' || PHP_OS == 'WINNT') && '' == $前綴 && true == $調整) {
$路徑 = strtr($路徑, '/', '\\');
}
return $路徑;
}
全站熱搜
留言列表