首页 > 解决方案 > PHP 替换 URL 中的基本名称

问题描述

我有这个功能。

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';
}

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

标签: php

解决方案


目前,你$_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。

片段:

<?php


function 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');

推荐阅读