Вступление


Написать данную статью меня побудила проблема валидация 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;
    }
}

Теперь обо всем по порядку...


  1. Первым делом мы определяем массив параметров в которых передаем наш url и говорим что не нужно выводить это на фронтэнд
  2. Инициализируем cURL
  3. Передаем ему массив с параметрами
  4. Проверяем на ошибки, если ошибок никаких нет, то отправляем запрос
  5. Закрываем наше соединение с cURL

В результате запроса мы получаем код ответа от сервера, который и проверяем. Коды 4хх — 5хх сразу исключаются тк это коды ошибок, нам же нужны кода 2хх или 3хх.

А что со скоростью?


Вопрос довольно спорный тк все зависит не только от нас, но и от удаленного сервера к которому мы шлем запрос. В моих тестах максимум по времени я видел 2,5 сек. что довольно таки много, но такова цена порядка в БД.