Mercurial > hg > webaudioevaluationtool
annotate php/rel2abs.php @ 3124:8bef85957a2f
YAUC
| author | Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk> |
|---|---|
| date | Wed, 18 Jul 2018 17:00:08 +0100 |
| parents | 464c6c6692d6 |
| children |
| rev | line source |
|---|---|
| nicholas@2249 | 1 <?php |
| nicholas@2249 | 2 |
| nicholas@2249 | 3 //http://stackoverflow.com/questions/4444475/transfrom-relative-path-into-absolute-url-using-php |
| nicholas@2249 | 4 function rel2abs($rel, $base) |
| nicholas@2249 | 5 { |
| nicholas@2249 | 6 /* return if already absolute URL */ |
| nicholas@2249 | 7 if (parse_url($rel, PHP_URL_SCHEME) != '' || substr($rel, 0, 2) == '//') return $rel; |
| nicholas@2249 | 8 |
| nicholas@2249 | 9 /* queries and anchors */ |
| nicholas@2249 | 10 if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel; |
| nicholas@2249 | 11 |
| nicholas@2249 | 12 /* parse base URL and convert to local variables: |
| nicholas@2249 | 13 $scheme, $host, $path */ |
| nicholas@2249 | 14 extract(parse_url($base)); |
| nicholas@2249 | 15 |
| nicholas@2249 | 16 /* remove non-directory element from path */ |
| nicholas@2249 | 17 $path = preg_replace('#/[^/]*$#', '', $path); |
| nicholas@2249 | 18 |
| nicholas@2249 | 19 /* destroy path if relative url points to root */ |
| nicholas@2249 | 20 if ($rel[0] == '/') $path = ''; |
| nicholas@2249 | 21 |
| nicholas@2249 | 22 /* dirty absolute URL */ |
| nicholas@2249 | 23 $abs = "$host$path/$rel"; |
| nicholas@2249 | 24 |
| nicholas@2249 | 25 /* replace '//' or '/./' or '/foo/../' with '/' */ |
| nicholas@2249 | 26 $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'); |
| nicholas@2249 | 27 for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {} |
| nicholas@2249 | 28 |
| nicholas@2249 | 29 /* absolute URL is ready! */ |
| nicholas@2249 | 30 return $scheme.'://'.$abs; |
| nicholas@2249 | 31 } |
| nicholas@2538 | 32 ?> |
