<?php
$url = 'https://example.com/folder1/folder2/style.css';
$paths = [ 'img/example1.png',
'/img/example2.png',
'../img/example3.png',
'../../img/example4.png',
'https://example.com/folder1/folder2/example5.png' ];
$folders = explode('/', trim(parse_url($url, PHP_URL_PATH), '/'));
array_pop($folders);
$prefix = explode('/' . $folders[0] . '/', $url)[0]; // need to be improved using parse_url to re-build
// properly the url with the correct syntax for each scheme.
function getURLFromPath($path, $prefix, $folders) {
if ( parse_url($path, PHP_URL_SCHEME) )
return $path;
foreach (explode('/', ltrim($path, '/')) as $item) {
if ( $item === '..' ) {
array_pop($folders);
} elseif ( $item === '.' ) {
} else {
$folders[] = $item;
}
}
return $prefix . '/' . implode('/', $folders);
}
foreach ($paths as $path) {
echo getURLFromPath($path, $prefix, $folders), PHP_EOL;
}
- Output for 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- https://example.com/folder1/folder2/img/example1.png
https://example.com/folder1/folder2/img/example2.png
https://example.com/folder1/img/example3.png
https://example.com/img/example4.png
https://example.com/folder1/folder2/example5.png
preferences:
131.56 ms | 408 KiB | 5 Q