2012-05-30 121 views
0

为什么PHP不支持相对URL?@fopen在PHP中不支持相对URL

这可以用其他编程语言来完成吗?服务器端可以微型快速检测?

$urla="http://cdn.domain.net"; 
$urlb="//cdn.domain.net"; 

if(@fopen($urla,"r")){ 
// I work 
} 

if(@fopen($urlb,"r")){ 
// I do not work 
} 

现在我说出来,多少黄金PHP不能像这样的工作,或者不支持,因为我猜,由于服务器端 - 也许是PHP核心的修改需要在C库? (What is a Relative URL?

+0

一个人可以梦想不能他..虽然这是微型问题..它也会帮助我..你需要修改C文件.. – AlphaApp

回答

2

中找到为什么PHP不支持相对路径?

相对URL支持需要相对URL相对于的基本URL。请参阅4.2. Relative Reference in RFC 3986 URI Generic Syntax

考虑到这一点,有一个PHP库可用,实际上确实支持相对URL,它与fopen兼容。这就是所谓的Net_URL2

require_once('Net/URL2.php'); # or configure your autoloader 

$baseUrl = 'http://cdn.domain.net'; 

$hrefRelativeOrAbsolute = '//cdn.domain.net'; 

$baseUrl = new Net_URL2($baseUrl); 

$urlAbsolute = (string) $baseUrl->resolve($hrefRelativeOrAbsolute); 

见以及problem with adding root path using php domdocument

+0

@Quentin回答这个问题。你为它提供了一个解决方案。把你们俩都重新包装了非常感激。 – TheBlackBenzKid

4

为什么PHP不支持相对URL?

因为它没有一个基本URL是从相对的(尽管一个可以从URI ......但仅通过一个HTTP请求触发PHP脚本的要求来计算)。

...如果它支持fopen中的相对URI,那么它将无法支持相对文件路径,因为它们无法区分。

+0

不同意。 &&减号。 – AlphaApp

+0

@AlphaApp请解释而不是减号.. – TheBlackBenzKid

+3

我不同意你的意见分歧 – Esailija

0

指示该函数的url中的协议是必需的,它是一种语言构造,指示包装器,与链接中的示例不同。

为什么它的需要,以及如何使用就可以将PHP文件php wrappers

+0

它在哪里告诉你为什么需要它?我无法在主要内容中看到它。它是否在页面上的许多用户贡献之一中?直接链接到相关的将不胜感激。 – Quentin

+0

功能的逻辑是可以理解的。文件系统函数,如fopen(),copy(),file_exists()和filesize()调用封装器来做一些事情,它不能工作没有包装。 – ShaaD