Вступление
Написать данную статью меня побудила проблема валидация URL'ов перед сохранением их в БД. Многие скажут что проще было бы воспользоваться регулярным выражением, но данный вариант я рассматривал и отказался от него тк. необходима проверка на живучесть ссылки.
Все строится на cURL и я думаю все с ней знакомы, кто же нет, то вот ссылка — Wikipedia.
/**
* @param string $url
* @return bool
*/
function getResponseCode($url) {
$header = '';
$options = array(
CURLOPT_URL => trim($url),
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true
);
$ch = curl_init();
curl_setopt_array($ch, $options);
curl_exec($ch);
if (!curl_errno($ch)) {
$header = curl_getinfo($ch, CURLINFO_HTTP_CODE);
}
curl_close($ch);
if ($header > 0 && $header < 400) {
return true;
} else {
return false;
}
}
Теперь обо всем по порядку...
- Первым делом мы определяем массив параметров в которых передаем наш url и говорим что не нужно выводить это на фронтэнд
- Инициализируем cURL
- Передаем ему массив с параметрами
- Проверяем на ошибки, если ошибок никаких нет, то отправляем запрос
- Закрываем наше соединение с cURL
В результате запроса мы получаем код ответа от сервера, который и проверяем. Коды 4хх — 5хх сразу исключаются тк это коды ошибок, нам же нужны кода 2хх или 3хх.
А что со скоростью?
Вопрос довольно спорный тк все зависит не только от нас, но и от удаленного сервера к которому мы шлем запрос. В моих тестах максимум по времени я видел 2,5 сек. что довольно таки много, но такова цена порядка в БД.