スクレイピング周りの作業をしていてURLの文字列操作が面倒で調べてみたところ、
parse_urlがというのを知りました、pathinfoみたいで便利でした。
ルートURLを取得する
$url = 'http://example.com/test/test.txt';
$url_info = parse_url($url);
$root_url = $url_info['scheme'].'://'.$url_info['host'];
var_dump($root_url);
var_dump($url_info);
string(18) "http://example.com"
array(3) {
["scheme"]=>
string(4) "http"
["host"]=>
string(11) "example.com"
["path"]=>
string(14) "/test/test.txt"
}
ベースURLを取得する
こっちはpathinfoを使用
$url = 'http://example.com/test/test.txt';
$url_info = pathinfo($url);
$base_url = $url_info['dirname'];
var_dump($base_url);
var_dump($url_info);
string(23) "http://example.com/test"
array(4) {
["dirname"]=> string(23) "http://example.com/test"
["basename"]=> string(8) "test.txt"
["extension"]=> string(3) "txt"
["filename"]=> string(4) "test"
}
/で終わる場合
$url = 'http://example.com/test/';
$url_info = pathinfo($url);
$base_url = $url_info['dirname'];
var_dump($base_url);
var_dump($url_info);
string(18) "http://example.com"
array(3) {
["dirname"]=>
string(18) "http://example.com"
["basename"]=>
string(4) "test"
["filename"]=>
string(4) "test"
}
この場合は$urlをそのまま使うこと
$base_url = (preg_match('/\/$/u', $url) === 1) ? $url : pathinfo($url)['dirname'];