Php 解析url localhost vs online
我有一个简单的方法来检查url是否是我的管理区域的一部分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
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;
}