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 ?>