Функция работает отлично на локальной машине, НО на сервере не срабатывает, если проверяем кириллический домен(например - http://майл.рф). PHP: function getheaders($url) { $c = curl_init(); curl_setopt($c, CURLOPT_HEADER, false); curl_setopt($c, CURLOPT_NOBODY, true); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($c, CURLOPT_URL, $url); $headers = curl_exec($c); curl_close($c); return $headers; }
кирилистические домены надо преобразовывать, вот пример с stackoverflow как это делается PHP: use TrueBV\Punycode; $url = 'http://домены.рф/партнерская-программа'; $urlDetails = parse_url($url); $punycode = new Punycode(); $domain = $punycode->encode($urlDetails['host']); $content = file_get_contents($urlDetails['scheme']. '://' . $domain . $urlDetails['path']);
PHP: $host = parse_url('http://майл.рф')['host']; echo idn_to_ascii($host); Код (Text): xn--80asgb.xn--p1ai --- Добавлено --- file_get_contents здесь не подойдет,так как он Warning будет бросать если сайт не существует.
Спасибо! Переделал функцию, можно ли ее упростить? PHP: function getheaders($url) { $c = curl_init(); curl_setopt($c, CURLOPT_HEADER, false); curl_setopt($c, CURLOPT_NOBODY, true); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2); $host = parse_url($url)['host']; $url = idn_to_ascii($host); curl_setopt($c, CURLOPT_URL, $url); $headers = curl_exec($c); curl_close($c); return $headers; }