Задать вопрос
@Godrick996

При проверке некоторых доменов на SSL PHP-скрипт зацикливается. Можете помочь с вопросом?

Я новичёк в PHP, написал простенький скрипт для проверки доменов на наличие SSL, но при проверке некоторых сайтов(например site.com) скрипт зацикливается что ли и ответ поступает достаточно долгий.

Код скрипта:
//Сбор информации с формы
            echo '<pre>';
            $forma = explode("\n", $_GET[textarea]);// считываем значения с формы построчно
                foreach($forma as $domens){// элементы массива присваиваем переменной $domens
                $punyc = rtrim($domens);// удаляем лишний пробел, на который я потратил уйму времени, чтобы его заметить :)
                $domen = idn_to_ascii($punyc);// кодирует кириллическе домены в punycode
                $http_url = "http://".$domen;
                $https_url = "https://".$domen;
                //Curl - запрос
                 $curl_start = curl_init($https_url); //Инициируем работу cUrl
                curl_setopt($curl_start, CURLOPT_RETURNTRANSFER, true); //Отключаем выхлоп от "curl_exec" на экран
                curl_setopt($curl_start, CURLOPT_CERTINFO, 1); // Врубаем выхлоп certinfo
                curl_setopt($curl_start, CURLOPT_SSL_VERIFYPEER, true); //Результат проверки SSL-сертификата
                curl_setopt($curl_start, CURLOPT_SSL_VERIFYHOST, 2);
                curl_exec($curl_start);
            
                $curl_info = curl_getinfo($curl_start); //Сбор необходимой информации
                $curl_code = $curl_info["http_code"]; //Код ответа сервера
                $curl_url = $curl_info["url"]; //URL указанный в форме, но с http:// - добавляется cUrl'ом
                $curl_redirect = $curl_info["redirect_url"]; //Редирект, если таковой есть
                #var_dump ($curl_info);
                $null_redirect = $curl_redirect == ""; //Если редирект с https:// никуда не выполняется
                
                if ($null_redirect !== ""){
                    switch ($curl_redirect) {
                        case $null_redirect:
                            echo "Редиректа нет";
                            break;
                        case $curl_redirect:
                            echo "Выполняется редирект на '$curl_redirect'";
                            break;
                }
                }
                
                $curl_ssl = $curl_info["certinfo"];
                    foreach ($curl_ssl as $ssl){
                    $ssl_info = $ssl['Issuer'];
                    $ssl_start = $ssl["Start date"];
                    $ssl_expire = $ssl["Expire date"];
                    echo "Домен: <b>$https_url</b>, \n";
                    echo "Информация о сертификате $ssl_info, \n";
                    echo "Выпущен $ssl_start, \n";
                    echo "Истекает $ssl_expire, \n";
                    var_dump ($domen);
                    }

            curl_close($curl_start);
            }


В трейсе вижу следующее:
connect(5, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("204.74.99.100")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)

rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[PIPE], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f4458429040}, NULL, 8) = 0
poll([{fd=5, events=POLLOUT}], 1, 199)  = 0 (Timeout)

rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_IGN, sa_mask=[PIPE], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f4458429040}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[PIPE], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f4458429040}, NULL, 8) = 0
poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
  • Вопрос задан
  • 118 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Wacdis
@Wacdis
PHP, Python, GO, Rust, NodeJS, SOA/MSA
Задайте Curl'у timeout в сек.:
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); // таймаут для соединения с хостом
curl_setopt($ch, CURLOPT_TIMEOUT, 15); // таймаут для сессии
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы