外部サイト(他ドメイン)のファイル存在確認

2013-05-05 00:42:00
画像ファイルがあるかないかを判断して、必要に応じてノーイメージ(now printing)を表示する時などに使用するファイル存在確認の代表的関数file_exists()。
<?php
$path = './log/item/12345.jpg';

if(file_exists($path)){
    $img = $path;
}else{
    $img = '/img/noimage.jpg';
}
?>
しかし、自サーバーならfile_exists関数でファイルがあるかないかを判断できるが、他ドメイン&他サーバーでは使用できないので、その場合はget_headers関数というのを使用する。
get_headers関数はファイルがあればいろいろなデータを配列で返してくれます。

画像ファイルだけではなく、URLでもログファイルでも存在確認ができるので、デッドリンクを自動的に判断させることも可能。
<?php
$url = 'http://www.example.com';
print_r(get_headers($url));

//表示結果
Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sat, 29 May 2004 12:28:13 GMT
[2] => Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
[3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
[4] => ETag: "3f80f-1b6-3e1cb03b"
[5] => Accept-Ranges: bytes
[6] => Content-Length: 438
[7] => Connection: close
[8] => Content-Type: text/html
)
?>
get_headers関数の返り値は上記のように配列で返ってくる。キー値が「0」の文字列に「OK」の文字があればファイルがある(生きている)ということになります。
<?php
$path = './log/item/12345.jpg';
$array = get_headers($path);

if(strpos($array[0],'OK')){
    処理…
}else{
    処理…
}
?>
意外と使えるシーンが多いかもしれないが、他のサーバーに繋ぐ関数なので、頻繁に使うべき関数ではない。どうしても必要な時だけ使用しましょう。