To check URL validity, this has been working nicely for me:
function url_valid(&$url) {
$file_headers = @get_headers($url);
if ($file_headers === false) return false; // when server not found
foreach($file_headers as $header) { // parse all headers:
// corrects $url when 301/302 redirect(s) lead(s) to 200:
if(preg_match("/^Location: (http.+)$/",$header,$m)) $url=$m[1];
// grabs the last $header $code, in case of redirect(s):
if(preg_match("/^HTTP.+\s(\d\d\d)\s/",$header,$m)) $code=$m[1];
} // End foreach...
if($code==200) return true; // $code 200 == all OK
else return false; // All else has failed, so this must be a bad link
} // End function url_exists