Чтобы все было в порядке, я написал систему управления доступом.
Одно из требований этой системы - проверить, доступен ли доступ к каноническому/нормализованному пути или нет, сопоставляя его с шаблоном.
Первые мысли упадут на PREG, проблема в том, что шаблоны основаны на файлах, то есть аналогичны тем, которые были приняты glob()
. В принципе, это просто шаблоны, содержащие ?
(соответствуют одному произвольному символу) или *
(соответствуют любому символу).
Итак, в простых терминах мне нужно воссоздать функциональность соответствия glob()
на PHP.
Пример кода:
function path_matches($path, $pattern){
// ... ?
}
path_matches('path/index.php', 'path/*'); // true
path_matches('path2/', 'path/*'); // false
path_matches('path2/test.php', 'path2/*.php'); // true
Возможным решением было бы преобразование $pattern
в регулярное выражение, чем использование preg_match()
, есть ли какой-либо другой способ, хотя?
NB: Причина, по которой я не могу использовать регулярное выражение, заключается в том, что шаблоны будут записаны не-программистами.