如何让file_get_contents()使用HTTPS?

2022-08-30 07:19:42

我正在设置信用卡处理,需要使用 CURL 的解决方法。当我使用测试服务器(它没有调用SSL URL)时,下面的代码工作正常,但现在当我使用HTTPS在工作服务器上测试它时,它失败了,错误消息为“无法打开流”。

function send($packet, $url) {
  $ctx = stream_context_create(
    array(
      'http'=>array(
        'header'=>"Content-type: application/x-www-form-urlencoded",
        'method'=>'POST',
        'content'=>$packet
      )
    )
  );
  return file_get_contents($url, 0, $ctx);
}

答案 1

要允许 https 包装器:

  • 扩展必须存在并已启用php_openssl
  • allow_url_fopen必须设置为on

在 php.ini 文件中,如果不存在,则应添加以下行:

extension=php_openssl.dll

allow_url_fopen = On

答案 2

请尝试以下脚本,查看是否有可用于 php 脚本的 https 包装器。

$w = stream_get_wrappers();
echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_export($w);

输出应类似于

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(11) {
  [...]
}

推荐