如何检查文件是否在所选路径中?
$_SERVER['DOCUMENT_ROOT'] === '/home/user/soloj';
几个路径:
/home/user/soloj/admin/user/file.php // false
/home/user/soloj/client/file.php // false
/home/user/soloj/public/file.php // true
/home/user/soloj/temp/file.php // true
/home/user/soloj/temp/folder/folder/file.php // true - all after temp is true
/home/user/soloj/zero/file.php // false
因此,如果文件位于/home/user/soloj/public/
或/home/user/soloj/temp/*
中,则我的函数应返回true;
$paths = array(
'/home/user/soloj/public/',
'/home/user/soloj/temp'
);
function check($paths, $path)
{
if ($path IN $paths) {
return true;
} else {
return false;
}
}
check($paths, 'public/file.php'); // true
check($paths, 'zero/file.php'); // false
check($paths, 'temp/aaa/file.php'); // true
check($paths, 'public/../zero/file.php'); // false
答案 0 :(得分:0)
类似这样的东西
function check($paths, $filepath)
{
$filepath = ltrim($filepath, '/'); //remove leading slashes
foreach($paths as $path){
$path = rtrim($path, '/').'/'; //insure consistent tailing slashes
if(file_exists($path.$filepath)) return true;
}
return false;
}
因为您不匹配/
$paths = array(
'/home/user/soloj/public/',
'/home/user/soloj/temp'
);
我添加了一些东西来清理它。我还清理了一下变量名。
在不进行标准化的情况下,您将得到此信息:
check($paths, 'public/file.php')
//check: /home/user/soloj/public/public/file.php
//check: /home/user/soloj/temppublic/file.php <-- incorrect
代替:
check($paths, 'public/file.php')
//check: /home/user/soloj/public/public/file.php
//check: /home/user/soloj/temp/public/file.php