Поскольку вы работаете с путями, важна чувствительность платформы; В Windows есть разделитель пути, отличный от большинства других платформ, и для написания кода многократного использования вы не можете использовать платформу.
PHP имеет несколько функций для работы с путями. Если вы получили действительно странный путь, такой как ~foo/bar//bitty/../index.php
, используйте realpath
, чтобы очистить его для вас.
$path = realpath("~foo/bar//bitty/../index.php");
/* output: /home/foo/bar/index.php */
Другие функции помогут вам - например, чтобы получить часть пути имени файла, используйте dirname
:
print dirname($path);
/* output: /home/foo/bar */
Как только вы это сделаете, разделитесь на разделители и делайте любую работу, какую хотите. Настоящая хитрость заключается в том, чтобы PHP беспокоился обо всех странностях путей, а затем просто работал с каждой частью отдельно. Посмотрите на pathinfo
и basename
. Я думаю, что это то, о чем вы просили, а не о том, как делать глупые замены строк.
Не забудьте запретить инъекцию в ваше приложение! Работа с путями из веб-ввода опасна. Никогда не доверяйте пользовательскому вводу.