如何在php中获取用于创建API的URL?

如何在php中获取用于创建API的URL?,php,regex,url,Php,Regex,Url,我想得到一个URL,这是来自反应路由。 URL类似于:http://localhost:3001/users/[会员\用户名] 其中,member\u username将根据用户名进行动态设置 例如,如果一个url像http://localhost:3001/users/gray然后一个变量将得到灰色或类似http://localhost:3001/users/john然后变量将获得john 现在,我需要将该url导入WordPress php文件以创建API 我尝试过这个解决方案,但没有得到适

我想得到一个URL,这是来自反应路由。 URL类似于:
http://localhost:3001/users/[会员\用户名]
其中,
member\u username
将根据用户名进行动态设置

例如,如果一个url像
http://localhost:3001/users/gray
然后一个变量将得到
灰色
或类似
http://localhost:3001/users/john
然后变量将获得
john

现在,我需要将该url导入WordPress php文件以创建API

我尝试过这个解决方案,但没有得到适合我问题的确切解决方案

这是我需要获取URL的API代码

function get_user_id(){
$server_name = $_SERVER['SERVER_NAME'];
$user_name = basename("http://".$server_name."/users/admin");

// For now i have set the username as static, so it should be a dynamic as user hit the url. 

  $users = get_user_by('login', $user_name);

  if( !empty($users) ){

    foreach ($users as $key => $user) { 
      $user_name = new stdClass();
      $user_name->id = $user->ID;
      $user_name->user_login = $user->user_login;
      $user_name->user_nicename = $user->user_nicename;
      $user_name->user_email = $user->user_email;
      return $user_name;
    }
  }

}
/*
 *
 * Add action endpoint building
 *
 */
add_action( 'rest_api_init', function () {
    register_rest_route( 'rest-endpoints/v1', '/userid', array(
            'methods' => 'GET',
            'callback' => 'get_user_id'
    ));
});

你能告诉我为什么这个解决方案不适合你的问题吗? 似乎可以获取用户名

不过,也许你可以试试这个

<?php
$url = parse_url('http://localhost:3001/users/yourname',PHP_URL_PATH);
$url = str_replace("/users/","",$url);
echo $url;
?>

您能告诉我为什么该解决方案不适合您的问题吗? 似乎可以获取用户名

不过,也许你可以试试这个

<?php
$url = parse_url('http://localhost:3001/users/yourname',PHP_URL_PATH);
$url = str_replace("/users/","",$url);
echo $url;
?>

您可以使用:

$url_path = parse_url('http://localhost:3001/users/a13/abc',PHP_URL_PATH);
$url = preg_replace("/\/(?:[^\/]*\/)*/","",$url_path);
echo $url;
输出:

abc
演示

或者这个正则表达式:

\/(?:[^\/\s]*\/)*
演示:

两者都可以正常工作。

您可以使用:

$url_path = parse_url('http://localhost:3001/users/a13/abc',PHP_URL_PATH);
$url = preg_replace("/\/(?:[^\/]*\/)*/","",$url_path);
echo $url;
输出:

abc
演示

或者这个正则表达式:

\/(?:[^\/\s]*\/)*
演示:


两者都可以正常工作。

根据您提供的SO参考和不起作用的解决方案…:您能否详细说明它为您产生的任何信息和/或错误(-log)?请使您的问号更具体,并确保其他人可以重现您的错误(即完整的代码?)。现在太笼统了。分类结束审核>需要编辑。我已编辑我的问题添加代码部分以获得更多理由。我没有收到错误,但我的问题是如何从远程url获取上学期的url?基于您提供的SO参考和不起作用的解决方案…:您能否详细说明它为您生成的任何信息和/或错误(-log)?请使您的问号更具体,并确保其他人可以重现您的错误(即完整的代码?)。现在太笼统了。分类结束审核>需要编辑。我已编辑我的问题添加代码部分以获得更多理由。我没有收到错误,但我的问题是如何从远程url获取上一个术语的url?
yourname
是动态的,那么我如何获取上一个术语的动态?@GrayCarry:你的意思是
yourname
实际上可能类似于
a/b/c
?您想获得
c
?是的,url的最后一部分将是动态的。。。所以它应该根据用户名进行更改,就像Facebook用户档案一样。它的第一部分是一个常量url(例如or),用户名将被动态传递。
yourname
是动态的,那么我如何才能得到最后一个术语dynamic?@graycharry:你的意思是
yourname
实际上可能类似于
a/b/c
?您想获得
c
?是的,url的最后一部分将是动态的。。。所以它应该根据用户名进行更改,就像Facebook用户档案一样。它的第一部分是一个常量url(例如or),用户名将被动态传递。我想要动态值,它将在一个常量url路径后连接,该路径是
http://localhost:3001/users/[会员名称]
那么是否有任何PHP函数会返回一个值,该值将获得动态用户名值?我想要动态值,该值将在
http://localhost:3001/users/[member_username]
那么是否有任何PHP函数将返回一个值,该值将获得该动态用户名值?