我目前正在测试我在谷歌找到的所有结果,但我不是那么幸运得到它。 我想要一个函数来搜索文件的通配符名称,例如: filename.patch.php 在我的文件夹中。如果文件名不存在,则将页面抛到404.但是,我不确定我是否正确行事。这是代码。
$results = glob("{manager/patches/$templateHandler/*.patch.php}", GLOB_BRACE);
if(preg_match_all($results, $pageHandler)) {
include 'manager/patches/'.$templateHandler.'/'.$pageHandler.'.patch.php';
} else {
include '404.php';
}
虽然我知道这里有一个数组输出,但那是我的问题。我不知道如何将输出提取到我的preg_match。
注意:我不是程序员,所以请耐心等待。
==
找到解决方案(到目前为止)!
$folder = glob("manager/patches/$templateHandler/*.patch.php");
$dir = implode(" ", $folder);
if(preg_match("/\b$pageHandler\b/i", $dir)) {
include 'manager/patches/'.$templateHandler.'/'.$pageHandler.'.patch.php';
} else {
include '404.php';
}
好的,我很高兴这个回答了我的问题,但是,我想咨询一下,如果这是标准的,可以安全使用吗?因为我看的输出显示正确。
答案 0 :(得分:1)
这里有一些问题。
1)glob函数返回一个数组,而不是一个字符串。因此,您需要遍历数组并针对正则表达式测试所有返回的文件名。
2)preg_match_all在单个字符串中找到同一正则表达式的多个实例,这可能不是您想要的。 preg_match可能就是你想要的。
3)preg_match和preg_match都将返回一个数组,如果你指定它应该,通过提供数组名称作为第三个参数。它实际上并没有返回它...它只是在范围内可用。
preg_match($regex, $string, $matches)
现在可以在范围内使用$ matches。
$ matches的每个元素都包含不同的内容,但是你会对$ matches [0]感兴趣,这是第一个元素,它将是找到的匹配项。换句话说,如果$ matches [0] =='string_to_match',则找到了您要查找的字符串。同样,您可以测试返回值1(在字符串中找到表达式),或者0(错误或在字符串中找不到表达式)。
但总的来说,我不确定这是实现所需内容的最佳方式,特别是当glob()返回一个可以在测试时匹配(或不匹配)多个文件的数组时。