Я запускаю несколько тестов, чтобы проверить, являются ли ссылки на моем сайте действительными - предупреждает меня, когда третьи лица изменяют свои ссылки. У меня была проблема с сайтом, у которого был плохо настроенный сертификат, из-за которого php get_headers не работал.
Итак, я прочитал, что завиток был быстрее, и решил попробовать. затем у меня возникла проблема с linkedin, которая выдала мне ошибку 999, которая оказалась проблемой агента пользователя.
Мне было все равно, если сертификат не действителен для этого теста, и мне было все равно, был ли ответ перенаправлен.
Тогда я решил использовать get_headers в любом случае, если curl не работает ....
Попробуй ....
/**
* returns true/false if the $url is present.
*
* @param string $url assumes this is a valid url.
*
* @return bool
*/
private function url_exists (string $url): bool
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_NOBODY, TRUE); // this does a head request to make it faster.
curl_setopt($ch, CURLOPT_HEADER, TRUE); // just the headers
curl_setopt($ch, CURLOPT_SSL_VERIFYSTATUS, FALSE); // turn off that pesky ssl stuff - some sys admins can't get it right.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// set a real user agent to stop linkedin getting upset.
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36');
curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (($http_code >= HTTP_OK && $http_code < HTTP_BAD_REQUEST) || $http_code === 999)
{
curl_close($ch);
return TRUE;
}
$error = curl_error($ch); // used for debugging.
curl_close($ch);
// just try the get_headers - it might work!
stream_context_set_default(array('http' => array('method' => 'HEAD')));
$file_headers = @get_headers($url);
if ($file_headers)
{
$response_code = substr($file_headers[0], 9, 3);
return $response_code >= 200 && $response_code < 400;
}
return FALSE;
}