Поскольку у нас было несколько ответов, я решил проверить их все и сравнить их.
Я использовал эти пути для проверки:
$from = "/var/www/sites/web/mainroot/webapp/folder/sub/subf/subfo/subfol/subfold/lastfolder/";
ПРИМЕЧАНИЕ: если это папка, вы должны поставить косую черту, чтобы функции работали правильно! Итак, __DIR__
не будет работать. Используйте __FILE__
вместо или __DIR__ . '/'
$to = "/var/www/sites/web/mainroot/webapp/folder/aaa/bbb/ccc/ddd";
РЕЗУЛЬТАТЫ: (десятичный разделитель - запятая, разделитель тысяч - точка)
- Функция Гордона: результат ПРАВИЛЬНО , время для 100.000 execs 1,222 секунд
- Функция по Юнгу: результат ПРАВИЛЬНО , время для 100 000 execs 1540 секунд
- Функция Ceagle: результат НЕПРАВИЛЬНО (он работает с некоторыми путями, но не работает с некоторыми другими, такими как те, которые использовались в тестах и написаны выше)
- Функция от Loranger: результат НЕПРАВИЛЬНО (он работает с некоторыми путями, но не работает с некоторыми другими, такими как те, которые использовались в тестах и написаны выше)
Итак, я предлагаю вам использовать реализацию Гордона! (помеченный как ответ)
Модель Юнга тоже хороша и работает лучше с простыми структурами каталогов (например, "a / b / c.php"), в то время как модель Гордона работает лучше со сложными структурами, с большим количеством подкаталогов (как те, которые используются в этом тесте) .
ПРИМЕЧАНИЕ: ниже я пишу результаты, возвращаемые с $from
и $to
в качестве входных данных, чтобы вы могли проверить, что 2 из них в порядке, а 2 других не верны:
- Гордон:
../../../../../../aaa/bbb/ccc/ddd
-> ПРАВИЛЬНО
- Молодые:
../../../../../../aaa/bbb/ccc/ddd
-> ПРАВИЛЬНО
- Ceagle:
../../../../../../bbb/ccc/ddd
-> НЕПРАВИЛЬНО
- Loranger:
../../../../../aaa/bbb/ccc/ddd
-> НЕПРАВИЛЬНО