Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解析url localhost vs online_Php_Url_Localhost - Fatal编程技术网

Php 解析url localhost vs online

Php 解析url localhost vs online,php,url,localhost,Php,Url,Localhost,我有一个简单的方法来检查url是否是我的管理区域的一部分 protected function is_admin_url ( $url ) { $parts = parse_url( $url ); if ( !empty($parts['path']) ) { $steps = explode('/', $parts['path']); if ( $steps[1] == $this->slug ) // $steps[0] will al

我有一个简单的方法来检查url是否是我的管理区域的一部分

protected function is_admin_url ( $url ) {
    $parts = parse_url( $url );
    if ( !empty($parts['path']) ) {
        $steps = explode('/', $parts['path']);
        if ( $steps[1] == $this->slug ) // $steps[0] will always be empty
            return true;
    }
    return false;
}
对于
http://example.com/slug/foo?bar=baz
我遇到的问题是,在我的本地机器上开发(使用WAMP)时,所有URL的格式都是
http://localhost/example.com/slug/foo?bar=baz
。这当然破坏了方法,因为域现在是路径的一部分

对数组索引进行硬编码必然会导致错误。我可以添加任何条件语句来处理这个问题吗


我还应该注意,这是WordPress插件的一部分。站点url未知。

只需检查最新/s之间的部分

protected function is_admin_url ( $url ) {
    $pFile = strrpos($url, '/');
    $pFolder = strrpos($url, '/', $pFile-1);
    if (($pFile === false) or ($pFolder === false)) {
        return false;
    }
    $folder = substr($url, $pFolder+1, $pFile-$pFolder-1);
    return ($folder == $this->slug);
}

BurninLeo

也许你可以使用$\u SERVER['REMOTE\u ADDR']='127.0.0.1'检查变量$local=true和use inside函数是否为_admin\u url。你可以检查
$steps[1]
中是否有点,或者只检查你是否在本地环境中工作:

protected function is_admin_url ( $url ) {
    $parts = parse_url( $url );
    if ( !empty($parts['path']) ) {
        $steps = explode('/', $parts['path']);
        $slug = $steps[1];
        if (strpos($steps[1], '.')) $slug = $steps[2];
        if ( $slug == $this->slug )
            return true;
    }
    return false;
}


不适用于像
http://localhost/example.com/slug/foo/?bar=baz
或多重文件夹我认为您的任务定义不充分。该方法应接受哪些内容作为“管理员URL”,哪些不接受?URL中任何地方的“slug”是否足够?还是应该检查所有可能的管理文件夹以避免误报?slug将始终是第一个folderNo。您的localhost示例刚刚证明它不会。这就是我写这个问题的原因。远程地址不可信dot方法在理论上可行,但我的slug是一个可设置的参数。我认为文件夹名称中允许使用点,这使得这种方法有问题。我不应该相信REMOTE_ADDR的值,因为它可以返回任何东西。关于“::1”或服务器在线IP如何。当然,我可以配置使用我的计算机设置,但是在另一台计算机上编码可能会产生错误的结果。无论如何,我认为您在使用它时不会遇到太多问题,如果您需要其他设置,请尝试使用
$\u SERVER['SERVER\u NAME']===“localhost”
。另外,关于REMOTE_ADDR:我已经接受了你关于dot方法的答案。我可以简单地对slug的设置施加限制。这肯定比摆弄遥控器要好
protected function is_admin_url ( $url ) {
    $parts = parse_url( $url );
    if ( !empty($parts['path']) ) {
        $steps = explode('/', $parts['path']);
        $slug = $steps[1];
        if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') $slug = $steps[2];
        if ( $slug == $this->slug )
            return true;
    }
    return false;
}