Это будет работать в любом случае, но белый список будет сейфом, а не черным списком (так что вы можете получить доступ только к каталогам, начинающимся с x).
Требуется регулярное выражение, с помощью которого можно проверить, начинается ли начало строки с определенного шаблона, который может соответствовать папке.
$regex = '/^(?:forbidden|restricted|xampp|apache_pb)/i';
В php это может выглядеть так:
function startIsRestricted($string) {
return preg_match('/^(?:forbidden|restricted|xampp|apache_pb)/i', $string);
}
Редактировать
Чтение этого обсуждения звучит так, будто вы хотите ограничить доступ к папкам. В этом случае вы можете захотеть взглянуть на защищающие каталоги с помощью документации по htaccess и htpasswd, которую вы можете найти на веб-сайте apache или на этом веб-сайте , немного перейдя ко всему этому. более
Ограничение в PHP было бы небезопасно ...
Редактировать 2
Код проверен на прочность ; по крайней мере, теперь я делаю взрыв вокруг карты массива (duh) и исправляю очевидные орфографические ошибки.
Но это должно, по крайней мере, дать хорошее представление о том, как вы можете сделать эту проверку рекурсивно для каждого каталога в строке ...
/**
* Function to check an entire string recursively to see if dissalowed directories are present
* Assuming the string seperator will be a forwardslash
*
* @param string $string String to be evaluated against the dissalowed directory list given or else default
* @param array $dissallow array of strings which are forbidden to be at the start of any of the directories
* @param string $sep The seperator for the directory levels
*
* @return string
*/
function test_directory ($string, array $dissallow = array('forbidden', 'restricted', 'xampp', 'apache_pb'), $sep = '/') {
$regex = '/^(?:' . implode('|', array_map ('preg_quote', $dissallow)) . ')/i';
$dirs = explode($sep, $string);
foreach($dirs as $dir) {
// true will mean a match is found and thus present in the beginning of a directory in $string
if(preg_match($regex, $dir))
return true;
}
return false;
}
Теперь я должен заметить, что регулярные выражения в подобных случаях могут замедлять работу, и его следует использовать слишком часто, если прямое совпадение с какой-либо строкой в массиве disSowow подходит для вас, проверяя каждый $dir
в $dirs
против каждой записи $dissallow
.