tips – Net_URL で URL を解決する

相対 URL から絶対 URL に変換するには PEAR::Net_URL が利用できます。
URL の要素を分解して取得することができるため、便利そうです。
 
インストール:

$ pear install Net_URL

HTTP_Request が依存しているので、ネットワーク関係の PEAR パッケージを入れたことがあれば既に入っていることが多いです。
 
例:とりあえず使ってみる

<?php
// http://example.com/foo/boo/file.php で実行する
 
require_once “Net/URL.php”;
 
$url =& new Net_URL(“next.html”);
echo “<PLAINTEXT>”;
var_dump($url);
echo $url->getURL();
?>

 
例: GET クエリで渡された URL が、自サービス内 URL かどうかを調べる
※外部サイトへの踏み台になるのは防ぎますが、内部のリファラチェック回避の踏み台にはなり得る事に注意。

$url =& new Net_URL($_GET[‘url’]);
if($url->host != $_SERVER[‘SERVER_NAME’]){ // 相対パスまたは同じドメインの絶対URLなら HTTP_HOST や SERVER_NAME と一致する。
echo “error!”;exit; //
}
echo “ok”;

 
参考:
PEAR::Net_URL(pear.php.net)