无法使用file_get_contents找到包装器“https”

问题描述 投票:10回答:6

使用https:// urls调用file_get_contents()会出现以下错误:

warning: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?

我已经阅读了10多个SO问题,所有人都说要启用extension=php_openssl.dll

我这样做了,我还有问题......

还有什么呢?

php apache https file-get-contents
6个回答
9
投票

解决了

要解决此错误,您需要在Web服务器上安装PHP的OpenSSL软件包。

在FreeBSD服务器上,您可能需要安装以下软件包:php53_openssl并重新启动您的Web服务器。

在Windows服务器上,打开php.ini配置文件,然后取消注释以下行:

 ;extension=php_openssl

并重新启动Web服务器。应该解决错误。

参考:我从this link那里得到它,这对我有用..所以很有信心。


1
投票

对于Windows 64bit上的PHP 7,请务必将libcrypto-1_1-x64.dll放入环境变量路径。例如:C:\php\libcrypto-1_1-x64.dll;


0
投票

我有同样的问题。我试图访问Facebook图表。它并不是因为它无法访问URL,而是因为我没有传递参数而导致Facebook返回400错误。尝试在具有有效HTTPS连接的站点上连接到HTTPS。例如。试试这个:

file_get_contents("https://www.namhost.com");

如果可行,您必须了解为什么要连接的HTTPs连接失败,因为问题不在于您无法连接到HTTP,而是您连接的内容不喜欢请求。


0
投票

就像人们说的那样,检查一下配置。

phpinfo.php的

<?php
phpinfo();
?>

在网页上搜索OpenSSL。另外,不要忘记在更改php.ini文件后重新启动WebServer。

如果您不能使用file_get_contents(),请使用cURL(如果可用),它在许多方面更好,速度更快。

function url($url,$option = null) {

    $cURL = curl_init();

    if ($option) {
        curl_setopt($cURL, CURLOPT_URL, $url.$option);
    } else {
        curl_setopt($cURL, CURLOPT_URL, $url);
    }

    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($cURL, CURLOPT_AUTOREFERER, 1);
    curl_setopt($cURL, CURLOPT_HTTPGET, 1);
    curl_setopt($cURL, CURLOPT_VERBOSE, 0);
    curl_setopt($cURL, CURLOPT_HEADER, 0);
    curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, 1);
    curl_setopt($cURL, CURLOPT_DNS_USE_GLOBAL_CACHE, 0);
    curl_setopt($cURL, CURLOPT_DNS_CACHE_TIMEOUT, 2);

    $output['page'] = curl_exec($cURL);
    $output['contentType'] = curl_getinfo($cURL, CURLINFO_CONTENT_TYPE);

    curl_close($cURL);

    return $output;

}

$page = url('https://example.com/','i/like/subfolders');

0
投票

我只是想添加这个花絮,因为我在这个问题上挣扎了几个小时,最后想出了一些有用的东西。对于很多这些WAMP / XAMP / MAMP安装,配置文件放在非标准目录中(即C:\ MAMP \ conf \ php \ php7.2.10 \ php.ini)。您需要确保您的php cli已加载您正在修改的INI。

$ php --ini

如果它没有指向正确的INI,或根本不加载任何配置文件,则可以为执行脚本的用户更改PHPRC环境变量,使其指向正确修改的INI的正确位置。另外,请确保php.ini中的extension_dir参数包含存储扩展的正确路径。

希望这可以帮助。


-1
投票

请确保在php.ini中将allow_url_include和allow_url_fopen设置为“On”。

如果这些行已注释,请取消注释它们。

此外,您可以使用以下脚本进行诊断:(取自How to get file_get_contents() to work with 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_dump($w);
© www.soinside.com 2019 - 2024. All rights reserved.