3v4l.org

run code in 300+ PHP versions simultaneously
<?php function make_absolute_path($a,$b){if((!$c=parse_url($a))||(!$d=parse_url($b))){return FALSE;}if(empty($c['host'])&&!empty($c['path'])&&substr($c['path'],0,2)==='//'){$e=explode('/',ltrim($c['path'],'/'));$c['host']=array_shift($e);$c['path']='/'.implode('/',$e);}if(empty($d['host'])&&!empty($d['path'])&&substr($d['path'],0,2)==='//'){$e=explode('/',ltrim($d['path'],'/'));$d['host']=array_shift($e);$d['path']='/'.implode('/',$e);}if(!empty($d['host'])){return $b;}if(empty($c['host'])){return FALSE;}if(empty($c['path'])){$c['path']='/';}if(empty($c['scheme'])){$c['scheme']='http';}$f=$c['scheme'].'://';if(!empty($c['user'])){$f.=$c['user'];if(!empty($c['pass'])){$f.=":{$c['pass']}";}$f.='@';}$f.=!empty($c['port'])?"{$c['host']}:{$c['port']}":$c['host'];if($b[0]==='/'){$f.=$b;}else if($b[0]==='?'){$f.=$c['path'].$b;}else{$g=rtrim(substr($c['path'],-1)==='/'?trim($c['path']):str_replace('\\','/',dirname(trim($c['path']))),'/');foreach(explode('/',$b)as $h){switch($h){case '':case '.':break;case '..':$g=rtrim(str_replace('\\','/',dirname($g)),'/');break;default:$g.="/$h";break;}}$f.=$g;}return $f;}$i=array(1=>array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'/photos/photo.jpg','expect'=>'http://www.xxx.com/photos/photo.jpg'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'/photos/photo.jpg','expect'=>'http://www.xxx.com/photos/photo.jpg'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'photos/photo.jpg','expect'=>'http://www.xxx.com/dir/photos/photo.jpg'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'./photos/photo.jpg','expect'=>'http://www.xxx.com/dir/photos/photo.jpg'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'../photos/photo.jpg','expect'=>'http://www.xxx.com/photos/photo.jpg'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'//www.yyy.com/photos/photo.jpg','expect'=>'//www.yyy.com/photos/photo.jpg'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'?query=something','expect'=>'http://www.xxx.com/dir/index.php?query=something'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'?query=something#fragment','expect'=>'http://www.xxx.com/dir/index.php?query=something#fragment'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'/photos/photo.jpg#fragment','expect'=>'http://www.xxx.com/photos/photo.jpg#fragment'),array('arg1'=>'http://www.xxx.com/dir/index.php','arg2'=>'../../photos/photo.jpg','expect'=>'http://www.xxx.com/photos/photo.jpg'),array('arg1'=>'http://www.xxx.com/dir/sub1/sub2/index.php','arg2'=>'../../photo/photo.jpg','expect'=>'http://www.xxx.com/dir/photo/photo.jpg'),array('arg1'=>'//www.xxx.com/dir/index.php','arg2'=>'test?query=something','expect'=>'http://www.xxx.com/dir/test?query=something'));foreach($i as $j=>$k){$f=make_absolute_path($k['arg1'],$k['arg2']);echo" Test #$j (".($f===$k['expect']?'PASS':'FAIL').") Arg 1: {$k['arg1']} Arg 2: {$k['arg2']} Expect: {$k['expect']} Result: $f ";}
Output for 4.3.0 - 4.3.11, 4.4.0 - 4.4.9, 5.0.0 - 5.0.5, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.34, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
Test #1 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: /photos/photo.jpg Expect: http://www.xxx.com/photos/photo.jpg Result: http://www.xxx.com/photos/photo.jpg Test #2 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: /photos/photo.jpg Expect: http://www.xxx.com/photos/photo.jpg Result: http://www.xxx.com/photos/photo.jpg Test #3 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: photos/photo.jpg Expect: http://www.xxx.com/dir/photos/photo.jpg Result: http://www.xxx.com/dir/photos/photo.jpg Test #4 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: ./photos/photo.jpg Expect: http://www.xxx.com/dir/photos/photo.jpg Result: http://www.xxx.com/dir/photos/photo.jpg Test #5 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: ../photos/photo.jpg Expect: http://www.xxx.com/photos/photo.jpg Result: http://www.xxx.com/photos/photo.jpg Test #6 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: //www.yyy.com/photos/photo.jpg Expect: //www.yyy.com/photos/photo.jpg Result: //www.yyy.com/photos/photo.jpg Test #7 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: ?query=something Expect: http://www.xxx.com/dir/index.php?query=something Result: http://www.xxx.com/dir/index.php?query=something Test #8 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: ?query=something#fragment Expect: http://www.xxx.com/dir/index.php?query=something#fragment Result: http://www.xxx.com/dir/index.php?query=something#fragment Test #9 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: /photos/photo.jpg#fragment Expect: http://www.xxx.com/photos/photo.jpg#fragment Result: http://www.xxx.com/photos/photo.jpg#fragment Test #10 (PASS) Arg 1: http://www.xxx.com/dir/index.php Arg 2: ../../photos/photo.jpg Expect: http://www.xxx.com/photos/photo.jpg Result: http://www.xxx.com/photos/photo.jpg Test #11 (PASS) Arg 1: http://www.xxx.com/dir/sub1/sub2/index.php Arg 2: ../../photo/photo.jpg Expect: http://www.xxx.com/dir/photo/photo.jpg Result: http://www.xxx.com/dir/photo/photo.jpg Test #12 (PASS) Arg 1: //www.xxx.com/dir/index.php Arg 2: test?query=something Expect: http://www.xxx.com/dir/test?query=something Result: http://www.xxx.com/dir/test?query=something

preferences:
344.99 ms | 413 KiB | 464 Q