从'http://someplace.com/index.php/foo'中获取'/ foo'

时间:2011-02-10 20:19:55

标签: php

据我所知,php有一个函数可以从以下网址中获取'/ foo / bar /':'http://someplace.com/index.php/foo/bar/'

无法记住调用的函数。

[编辑]

我记得在ExpressionEngine(see this)中使用了类似的东西。后来在一篇文章中解释了用PHP构建这样的函数。但是我不记得它是什么。

[编辑#2]

我知道有一些函数可以输出URL,有几个可以操作它。但是我清楚地记得有一个函数正在做这个特定的事情。看看我链接到的ExpressionEngine示例,也可以更好地理解我的意思。

[编辑#3]

我使用的不是ExpressionEngine。 It was CodeIngniter。但它基本上是一回事。

[编辑#4]

也许我错了。我只记得曾经在文章中走过这样一个功能...... 案件结案(除非有人偶然发现这样的功能)。

4 个答案:

答案 0 :(得分:2)

我相信您正在寻找parse_url

parse_url('http://someplace.com/index.php/foo');
/*
Array
(
    [scheme] => http
    [host] => someplace.com
    [path] => /index.php/foo
)

*/

然后,您可以操纵path项目以删除/index.php

答案 1 :(得分:2)

这不是一个功能。这是一个变量:$_SERVER['PATH_INFO']

答案 2 :(得分:1)

那是$_SERVER['PATH_INFO']。它可能并非在所有系统上都可用,它依赖于ewebserver传递它。在Apache中,这是AcceptPathInfo选项。

对gregoire的回应:

除非在当时处理该网址的网络服务器上完成,否则无法从具有100%可靠性的网址中提取path_info - 您无法分辨实际脚本部分的结束位置和path_info的开始,特别是如果路径是某些内容喜欢

/a/b/c/scriptishere/path/info

没有'.html',或'.php',或'.aspx'或任何甚至给你提示的东西。因此,这是100%可靠地回答OP问题的唯一方法。其他任何东西都是猜测 - 甚至OP的样本中的“index.php”也可能是一个目录而实际的脚本是'foo'

答案 3 :(得分:0)

如果字符串总是包含index.php,为什么不只是substr,如下所示:

$url = "http://someplace.com/index.php/foo/bar/";
$delim = 'index.php';
$path = substr($url,strpos($url,$delim)+strlen($delim));

这有点冗长,但是如果你能澄清这个字符串来自哪些部分将会改变的地方我可以给出一个更简洁的答案。

你也可以使用正则表达式:

$matches = array();
preg_match('index.php\/(.*)$',$matches);

$ matches将包含索引1中的匹配字符串,索引0将是原始字符串。 我没有测试那个正则表达式,但是这样的东西应该有效。