【问题标题】:file_get_content not working for https in phpfile_get_content 不适用于 php 中的 https
【发布时间】:2019-10-27 18:57:30
【问题描述】:

有人对通过 https 的网站显示内容有疑问吗?该代码一直有效,直到服务器上的所有站点都获得了 ssl。证书是 tlss 1.2 可能与此有关?所以我试图做这个的网站现在有这个证书。

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

【问题讨论】:

  • 我已经尝试过您的代码,并且运行良好。
  • 是的,我假设您的环境或 ssl 不同?我正在使用 php 5.3
  • 如果我将 url 替换为 google.com 这可行:s
  • 尝试获取新证书:curl.haxx.se/docs/caextract.html
  • 对不起,我想用什么来做这个,我不熟悉 php

标签: php file-get-contents tls1.2


【解决方案1】:

根据php.net

使用 SSL 时,Microsoft IIS 将通过关闭 连接而不发送 close_notify 指示符。 PHP 会报告 当您到达末尾时,这会显示为“SSL:致命协议错误” 数据。要解决这个问题,error_reporting 的值应该是 降低到不包括警告的水平。 PHP可以检测 使用 https:// 打开流时出现错误的 IIS 服务器软件 包装器并将抑制警告。使用 fsockopen() 时 创建一个ssl://socket,开发者负责检测 并禁止显示此警告。

Source link

【讨论】:

  • 嗯你知道如何解决这个问题吗?我减少了错误没有成功
  • 你可以使用 try...catch 块。
【解决方案2】:

Based on OpenSSL changes in 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");

【讨论】:

  • 或者如果我尝试 bbc.com 等
  • 使用 curl 的好临时解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 2013-09-24
  • 2011-04-14
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多