【发布时间】:2012-12-17 12:01:54
【问题描述】:
为了简短起见,我编写了一个访问控制系统。
该系统的要求之一是通过将其与模式匹配来检查规范/规范化路径是否可以访问。
首先想到的是PREG,问题是,模式是基于文件的,即类似于glob() 接受的模式。基本上,它只是包含?(匹配任意字符)或*(匹配任意字符)的模式。
所以简单来说,我需要在 PHP 上重新创建 glob() 的匹配功能。
示例代码:
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(),但是还有其他方法吗?
注意:我不能使用正则表达式的原因是模式将由非程序员编写。
【问题讨论】:
-
如果 glob() 已经存在于 php 中,为什么要重新创建它? php.net/manual/en/function.glob.php
-
呃,请再看一遍问题。
glob()适用于实际路径,我需要重新创建其模式匹配功能。我不知道如何在我的案例中使用glob()(在不存在的路径上)。 -
我的错,看我的回答:)
标签: php path pattern-matching glob