🔎

Швидкий спосіб дізнатися про відповідь сервера сторінки?

Є великий масив шляхів URL, потрібно дізнатися про коди відповідей сервера по кожному з них за допомогою PHP. Як можна максимально швидко дізнатися статус, не завантажуючи кожну сторінку curl або file_get_contents? Тому що цими способами великий масив обробляється занадто довго.
php
1 відповідь
  • Валентин
    Ось готове рішення:
    $urls  = [
    'https://google.com',
    'https://kovelpost.com'
    ];
    $mh = curl_multi_init();
    foreach ($urls as $i => $url) {
    $conn[$i] = curl_init($url);
    curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, true);
    curl_setopt($conn[$i], CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($conn[$i], CURLOPT_HEADER, true);
    curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, '');
    curl_setopt($conn[$i], CURLOPT_ENCODING, '');
    curl_setopt($conn[$i], CURLOPT_AUTOREFERER, true);
    curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT, 120);
    curl_setopt($conn[$i], CURLOPT_TIMEOUT, 120);
    curl_setopt($conn[$i], CURLOPT_MAXREDIRS, 10);
    curl_setopt($conn[$i], CURLOPT_NOBODY, true);
    curl_multi_add_handle($mh, $conn[$i]);
    }
    do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
    curl_multi_select($mh);
    }
    while (false !== ($info = curl_multi_info_read($mh))) {
    echo $url = curl_getinfo($info['handle'], CURLINFO_EFFECTIVE_URL);
    echo $http_code = curl_getinfo($info['handle'], CURLINFO_HTTP_CODE);
    }
    } while ($active && $status == CURLM_OK);

    foreach ($urls as $i => $url) {
    curl_close($conn[$i]);
    }
    Результат роботи:
    https://google.com/ 301 (переадресовує на www.google.com)
    https://kovelpost.com/ 200