PHP 中的@fopen不支持相对 URL


@fopen in PHP does not support relative URLs

为什么 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?(什么是相对网址?

为什么 PHP 不支持相对 URL?

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

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

为什么 PHP 不支持相对 URL?

相对 URL 支持需要相对 URL 相对于的基本 URL。请参阅 4.2. RFC 3986 URI 泛型语法中的相对引用。

考虑到这一点,有一个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);

另请参阅使用 php domdocument 添加根路径的问题。

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

为什么需要它以及如何使用可以在 php 文档 php 包装器中找到