色々調べたのですがはまったので自分の為のまとめ
1.get_headers
参考:URLが実際に存在するかどうかを調べる方法(PHP) | PIXTURE STUDIO
~~~
2.fopen
参考:PHPでリンク先が存在するかどうかを調べる方法 – あざわの備忘録
~~~
~~~
3.file_get_contents
~~~
4.pear
わざわざ使いたくないのでパス
これらを実際にまとめてやってみる
~~~
get_headers
‘;
$header = get_headers($url);
if(strstr($header[0], ‘200’)) {
echo $url . ‘は存在します’;
} else {
echo $url . ‘は存在しません’;
}
echo ‘
fopen
‘;
if($fp = fopen($url, “r”)){
echo $url . ‘は存在します’;
}else{
echo $url . ‘は存在しません’;
}
echo ‘
file_get_contents
‘;
$data = file_get_contents($url);
if($data){
echo $url . ‘は存在します’;
}
else{
echo $url . ‘は存在しません’;
}
}
~~~
結果はどうなるかと言いますと
get_headers
~~~
Warning: get_headers(http://www.hoge.co.jp/) [function.get-headers]: failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/html/test/test.php on line 9
~~~
fopen
~~~
Warning: fopen(http://www.hoge.co.jp/) [function.fopen]: failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/html/test/test.php on line 17
http://www.hoge.co.jp/は存在しません~~~
file_get_contents
~~~
Warning: file_get_contents(http://www.hoge.co.jp/) [function.file-get-contents]: failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/html/test/test.php on line 24
http://www.hoge.co.jp/は存在しません
~~~
こんな感じになりました。
存在しないURLをはじきたいのにWarningが出ちゃうのはちょっとどうなんでしょう
(このまま使うには@つければWarningは出なくなります)
じゃあどうすればいいのか、という話になると正直いい方法が見当たらないわけですが
~~~
curl
‘;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$r = curl_exec($ch);
$r = split(“\n”, $r);
if (preg_match(‘/200/’, $r[0])) {
echo $url . ‘は存在します’;
} else{
echo $url . ‘は存在しません’;
}
~~~
こんな感じで結果は得られます
if文をもう少し厳密にすればもっと正しい処理になるような、でもやっぱ微妙なような。
もっといい方法あったら教えてくださいまし\(^-^)/
コメント
[…] 参考:のぶろぐ […]