Мне нужно получить имя пользователя из ссылающегося URL (только если реферер начинается с «/ members /» после имени хоста.
То, что у меня в данный момент не работает, но как это можно изменить, чтобы получить имя пользователя из URL?
// example URL
// http://domain.com/members/john-doe/something
// note that domain.com or protocol can change
$string = $_SERVER['HTTP_REFERER'];
$start = '/members/';
$end = '/';
$startpos = strpos($string, $start) + strlen($start);
if (strpos($string, $start) !== false) {
$endpos = strpos($string, $end, $startpos);
if (strpos($string, $end, $startpos) !== false) {
echo substr($string, $startpos, $endpos - $startpos);
}
}
Ты можешь использовать parse_url()
разбить URL, а затем сопоставить его с preg_match()
:
if (preg_match('~^/members/([^/]+)~', parse_url($string, PHP_URL_PATH), $matches)) {
// path starts with "/members/"// $matches[1] is the user name
}
Я бы сделал это —
$url = 'http://domain.com/members/john-doe/something';
$urlParts = explode('/', $url); // get all parts of te url
if('members' == $urlParts[3]) { // test and display
echo $urlParts[4];
}
Вот пример.
Вы можете использовать комбинацию parse_url()
а также pathinfo()
за это:
$pathDir = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_DIRNAME);
$directories = explode('/', $pathDir);
if(array_search('members', $directories) !== false) {
// perform your magic
}
Вот код, который я придумал:
$string = $_SERVER['HTTP_REFERER'];
$start = '/members/';
$end = '/';
$startpos = strpos($string, $start);
if ($startpos !== false) {
$endpos = strpos($string, $end, ($startpos += strlen($start)) + 1);
if ($endpos !== false) {
echo substr($string, $startpos, $endpos - $startpos );
}
}
Он основан на коде OP, но я внес некоторые исправления.
3-го и 4-го strpos
ОП забыл установить $startpos + 1
так что это не соответствует /
на подстроке /member/
, но на следующий символ.
Любые сомнения, я свободен ответить на них.