PHP中的@fopen不支持相对URL

时间:2012-05-30 10:43:59

标签: php url fopen relative-path

为什么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不能像这样工作或不支持,因为我猜测由于服务器端 - 可能在C库中需要修改CORE PHP? (What is a Relative URL?

3 个答案:

答案 0 :(得分:4)

  

为什么PHP不支持相对URL?

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

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

答案 1 :(得分:2)

  

为什么PHP不支持相对URL?

相对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

答案 2 :(得分:0)

在url中指示此函数所需的协议,它是一个语言结构,指示一个包装器,与链接中的示例不同。

为什么需要以及如何使用可以在php文档php wrappers

中找到