Mercurial > hg > waet-hammond-1
annotate new/php/rel2abs.php @ 22:1f375b7d75fd tip
updated warning for breaks during test
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Fri, 13 May 2016 19:01:08 +0100 |
parents | 853caf8cd74b |
children |
rev | line source |
---|---|
giuliomoro@15 | 1 <?php |
giuliomoro@15 | 2 |
giuliomoro@15 | 3 //http://stackoverflow.com/questions/4444475/transfrom-relative-path-into-absolute-url-using-php |
giuliomoro@15 | 4 function rel2abs($rel, $base) |
giuliomoro@15 | 5 { |
giuliomoro@15 | 6 /* return if already absolute URL */ |
giuliomoro@15 | 7 if (parse_url($rel, PHP_URL_SCHEME) != '' || substr($rel, 0, 2) == '//') return $rel; |
giuliomoro@15 | 8 |
giuliomoro@15 | 9 /* queries and anchors */ |
giuliomoro@15 | 10 if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel; |
giuliomoro@15 | 11 |
giuliomoro@15 | 12 /* parse base URL and convert to local variables: |
giuliomoro@15 | 13 $scheme, $host, $path */ |
giuliomoro@15 | 14 extract(parse_url($base)); |
giuliomoro@15 | 15 |
giuliomoro@15 | 16 /* remove non-directory element from path */ |
giuliomoro@15 | 17 $path = preg_replace('#/[^/]*$#', '', $path); |
giuliomoro@15 | 18 |
giuliomoro@15 | 19 /* destroy path if relative url points to root */ |
giuliomoro@15 | 20 if ($rel[0] == '/') $path = ''; |
giuliomoro@15 | 21 |
giuliomoro@15 | 22 /* dirty absolute URL */ |
giuliomoro@15 | 23 $abs = "$host$path/$rel"; |
giuliomoro@15 | 24 |
giuliomoro@15 | 25 /* replace '//' or '/./' or '/foo/../' with '/' */ |
giuliomoro@15 | 26 $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'); |
giuliomoro@15 | 27 for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {} |
giuliomoro@15 | 28 |
giuliomoro@15 | 29 /* absolute URL is ready! */ |
giuliomoro@15 | 30 return $scheme.'://'.$abs; |
giuliomoro@15 | 31 } |
giuliomoro@15 | 32 ?> |