这是一个PHP的函数,可以把相对路径转为绝对路径。比如可以把http://www.neatstudio.com/archive/../upload/xxx.jpg,转换成http://www.neatstudio.com/upload/xxx.jpg
- function getRealUrl($url) {
- $path = parse_url($url, PHP_URL_PATH);
- $patharr = explode("/", $path);
- $newarr = array();
- $i = 0;
- foreach ($patharr as $k => $val) {
- if ($k != 0 && !$val) {
- continue;
- }
- if ($val == '..' && count($newarr) > 1) {
- unset($newarr[$i - 1]);
- $i--;
- continue;
- }
- $newarr[$i] = $val;
- $i++;
- }
- $newpath = join("/", $newarr);
- return str_replace($path, $newpath, $url);
- }
正常情况下,都没什么问题。但某一天,居然遇到了这样的网址:http://neatstudio.com/xxx/xxx/../0/abc.jpg,于是就出错了,返回成http://neatstudio.com/xxx/abc.jpg
细心的朋友可能发现了上面的问题,/0这个目录不见了。这是为什么呢??
居然是因为第7行 ,我对$val的判断是!$val。。。它认为0目录是不为真就跳过了。TNND,所以我改成了$val == '',真纠结。
粗心啊(请不要纠结上面的代码。花10分钟写的东西,质量不高是肯定的。)