PHP 替换 URL 中的 basename

我有这个功能。


function getCallbackUrl(){

    $protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";

    return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . 'response.php';

}

在我的 URL 上,http://localhost/gateways/payu/index.php上述函数显示这样的 URL http://localhost/gateways/payu/index.phpresponse.php。不知道为什么会这样。该功能对我来说似乎是正确的。也许我遗漏了一些我无法将基本名称从index.phpto替换的东西response.php。任何帮助将不胜感激。谢谢 :)


慕标琳琳
浏览 102回答 1
1回答

呼如林

目前,你$_SERVER['REQUEST_URI']自己有index.php,因此你面临这个问题,在哪里response.php连接而不是替换。快速修复如下:$_SERVER['REQUEST_URI'] = str_replace(basename($_SERVER['REQUEST_URI']),'response.php',$_SERVER['REQUEST_URI']);return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];您还可以结合使用parse_url(),str_replace()和basename()来实现此目的。解析 url 并获取 URI 路径。获取 URI 的基本名称。将其替换为您想要的那个。将这些部分连接在一起并返回 URL。片段:<?phpfunction getCallbackUrl($url,$replacement_file){    $url_data = parse_url($url);    $url_data['path'] = str_replace(basename($url_data['path']),$replacement_file,$url_data['path']);    $url = $url_data['scheme'] . "://" .  $url_data['host'] . $url_data['path'];    if(!empty($url_data['query'])) $url .= '?' . $url_data['query'];    return $url;}echo getCallbackUrl('http://localhost/gateways/payu/index.php','response.php');
打开App,查看更多内容
随时随地看视频慕课网APP