You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中URLPart函数无法返回指定URL目录,请求排查原因

问题排查与解决方案

让我来帮你拆解这个问题的根源,以及如何修复它:

首先,你得先明确$_SERVER['PHP_SELF']在你的访问场景里的实际值。当你在example.com/test/directory访问脚本时(假设脚本是该目录下的index.php),$_SERVER['PHP_SELF']的真实值是/test/directory/index.php。

当你用explode("/", $_SERVER['PHP_SELF'])拆分这个字符串后,得到的数组是这样的:

Array
(
    [0] => 
    [1] => test
    [2] => directory
    [3] => index.php
)

你的函数逻辑是,当调用URLPart(1)时,会计算$part - 1 = 0,然后返回数组索引0的元素——也就是空字符串,这就是你看不到任何输出的原因!

修复方案

我们需要先过滤掉拆分后数组里的空元素,再调整索引对应关系,同时增加边界判断避免报错。这里提供两种可行的修正版本:

版本1:过滤空元素后直接使用

function URLPart($part) {
    // 拆分URL并过滤空元素(处理开头的斜杠导致的空值)
    $urlParts = array_filter(explode("/", $_SERVER['PHP_SELF']));
    // 检查传入的part是否有效,避免索引越界
    if ($part > 0 && isset($urlParts[$part - 1])) {
        return $urlParts[$part - 1];
    } else {
        return $_SERVER['PHP_SELF'];
    }
}

版本2:过滤后重新索引数组(更直观的索引对应)

function URLPart($part) {
    $url = explode("/", $_SERVER['PHP_SELF']);
    // 过滤空元素并重新索引,让数组从0开始连续排列
    $urlParts = array_values(array_filter($url));
    if ($part > 0 && isset($urlParts[$part - 1])) {
        return $urlParts[$part - 1];
    } else {
        return $_SERVER['PHP_SELF'];
    }
}

现在当你调用URLPart(1)时,就能正确返回test了;调用URLPart(2)会返回directory,完全符合你的预期。

内容的提问来源于stack exchange,提问作者Anonymouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:41:04