file_get_content не работает для https в php - PullRequest
1 голос
/ 13 июня 2019

У кого-нибудь возникла проблема с отображением контента с веб-сайта, работающего через https? Код работал, пока все сайты на сервере не получили ssl. может быть что-то с сертификатом tlss 1.2? Итак, сайт, с которого я пытаюсь это сделать, теперь имеет этот сертификат.

$data = file_get_contents('https://www.ladygaga.com/'); 
echo $data;

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Согласно php.net

При использовании SSL Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify.PHP сообщит об этом как «SSL: Фатальная ошибка протокола», когда вы достигнете конца данных.Чтобы обойти это, значение error_reporting должно быть понижено до уровня, который не включает предупреждения.PHP может обнаружить ошибочное программное обеспечение сервера IIS при открытии потока с помощью обертки https: // и подавит предупреждение.При использовании fsockopen () для создания сокета ssl: // разработчик отвечает за обнаружение и подавление этого предупреждения.

Ссылка на источник

0 голосов
/ 13 июня 2019

На основании изменений OpenSSL в PHP 5.6 , попробуйте это:


$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ),
);  

$response = file_get_contents("https://www.ladygaga.com/", false, stream_context_create($arrContextOptions));

echo $response;

Другой вариант - использовать curl как таковой:

function file_get_contents_curl( $url ) {

  $ch = curl_init();

  curl_setopt( $ch, CURLOPT_AUTOREFERER, TRUE );
  curl_setopt( $ch, CURLOPT_HEADER, 0 );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt( $ch, CURLOPT_URL, $url );
  curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, TRUE );

  $data = curl_exec( $ch );
  curl_close( $ch );

  return $data;

}

$data = file_get_contents_curl("https://www.ladygaga.com");

...