2012-05-30 59 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