我使用的是$dir
变量,它给出了以下路径:
uploads/sha256/aaa
或
uploads/sha256/aaa/subaaa
或
uploads/sha256/aaa/subaaa/subsubaaa
变量$UserID
产生sha256
我该如何在sha256的之后抓住零件?
因此,仅抓住aaa
或aaa/subaaa
或aaa/subaaa/subsubaaa
答案 0 :(得分:1)
假设“ sha256”是用户生成的sha-256哈希值,该值将针对每个用户而变化,因此您需要忽略它并关注URI中的固定内容,即斜杠。解决它的一种方法是使用正则表达式:
$string = "uploads/sha256/aaa/subaaa/subsubaaa";
preg_match("/uploads\\/[^\\/]+\\/(.*)/", $string, $matches);
var_dump($matches[1]);
string(20) "aaa/subaaa/subsubaaa"
答案 1 :(得分:1)
执行此操作的最佳方法是使用explode函数。这将在特定的分隔符处分割字符串。然后,您可以获得返回的数组的最后一个值,该值将是$ userId之后的字符串。
$dir = explode($UserID . '/', $dir);
echo $dir[1];
答案 2 :(得分:0)
使用sha256/
分解字符串,数组中的第二项将成为您所需的部分。
$x = explode('sha256/', "uploads/sha256/aaa/subaaa/subsubaaa");
var_dump($x[1]);
答案 3 :(得分:0)
$array = explode("sha256/",$dir);//divides the string into array elements using 'sha256/' as breaking point note the trailing lash
$last = end($array);//grabs last element in array or in this case everything after sha256/
如果您trust
$ UserID,则可以这样动态地进行操作:
$array = explode($UserID."/",$dir);//divides the string into array elements using $UserID as breaking point beware of ill input
$last = end($array);//grabs last element in array or in this case everything after sha256/
您应该了解目录遍历以及涉及用户输入和目录的攻击。例如,如果用户标识可以是aaa或subaaa,那么您将具有不可预测的行为。