无法find包装“https” – 你忘记configurationPHP时启用它?

问题在于这个问题。 我已经做了彻底的调查解决scheme,对此我知道有这个话题,我也跟着他们,没有任何工作。 这就是说,我将列出我到目前为止所做的一切。 我使用Zend Debugging在我的Windows XP计算机上的最新Eclipse版本上运行PHP 5.2.14。 我有一个1 GB的RAM。 我有安装了Apache,MySQL和FileZilla的XAMPP。

在XAMPP上,我做了以下操作(在这些更改期间,Apache已closures):单击XAMPP控制面板上的pipe理员 ,然后转到https:// localhost/xampp/ 。 从那里我接受了欢迎页面上这一行的证书:

对于OpenSSL支持,请使用https:// 127.0.0.1或https:// localhost的testing证书。

在同一节我检查了phpinfo() 。 在“环境”下, SERVER["HTTPS"] on 。 在“Apache环境”下, HTTPS On 。 在“PHPvariables”下, _SERVER["HTTPS"] On 。 在'Phar'下, OpenSSL supportdisabled (安装ext / openssl)。 我不知道如何启用Phar。

现在关于C:\ xampp中的文件本身,我去了PHP文件夹。 在生产和开发的php.ini文件(比对不起更安全)下,我有allow_url_fopen=Onallow_url_include=On ,我删除了分号,这样extension=php_openssl.dll不再被注释掉。 我甚至确认.dll文件在PHP文件夹的ext文件夹中。 libeay32.dll和ssleay32.dll都在PHP和Apache文件夹中。 Apache文件夹不包含生产性或开发性的php.ini文件。

我已经去了http://www.slproweb.com/products/Win32OpenSSL.html并安装了Win32 OpenSSL v1.0.0d以保证安全。

现在在我的retrieve_website.php中有问题的代码行如下所示:

 $urlquery = "https://www.googleapis.com/customsearch/v1?key=".$appid."&cx=".$google_searchid."&q=".$query."&alt=atom&num=".$results; $xmlresults = file_get_contents($urlquery); 

我有两个其他网站,我查询,但他们通过HTTP服务,他们工作正常。 我还在脚本的末尾input了这行代码:

 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); 

当我在Eclipse上将其作为PHP脚本运行时,所有的输出都会以我想要的方式与这些结果一起完美地运行:

 openssl: yes http wrapper: yes https wrapper: yes wrappers: array(10) { [0]=> string(5) "https" [1]=> string(4) "ftps" [2]=> string(3) "php" [3]=> string(4) "file" [4]=> string(4) "data" [5]=> string(4) "http" [6]=> string(3) "ftp" [7]=> string(13) "compress.zlib" [8]=> string(14) "compress.bzip2" [9]=> string(3) "zip" } 

尽pipe我做了所有这些更改(在启动Apache之后),但是在第一次通过http://localhost/tutorial/retrieve_website.php访问我的Eclipse脚本和Firefox脚本时,仍然遇到了相同的错误:

警告:file_get_contents()[function.file-get-contents]:无法find包装“https” – 你忘记configurationPHP时启用它? 在第29行的C:\ xampp \ htdocs \ tutorial \ retrieve_website.php中

警告:file_get_contents(https:// www.googleapis.com/customsearch/v1?key= 删除API ID &cx = 已删除的searchID &q =魔鬼+去+下+ +格鲁吉亚&alt = atom#= 5)[function.file -get-contents]:无法打开stream:第29行的C:\ xampp \ htdocs \ tutorial \ retrieve_website.php中没有这样的文件或目录

警告:DOMDocument :: loadXML()[domdocument.loadxml]:在第33行的C:\ xampp \ htdocs \ tutorial \ retrieve_website.php中作为input提供的空string

openssl:没有HTTP包装:是的HTTPS包装:无包装:数组(10){[0] =>string(3)“PHP”[1] =>string(4)“文件”[2] =>string(4 )“glob”[3] => string(4)“data”[4] => string(4)“http”[5] => string(3)“ftp”[6] => string(3) zip“[7] => string(13)”compress.zlib“[8] => string(14)”compress.bzip2“[9] => string(4)”phar“}

我忽视了什么,或者没有做到什么? 据我所知,我已经完成了我所研究的关于HTTPS和OpenSSL的一切

我解决了它在XAMPP通过取消注释;extension=php_openssl.dll/apache/bin/php.ini 尽pipe phpinfo()告诉我/php/php.ini是加载的ini文件。

编辑:我想Ezra答案是最好的解决scheme直接添加到适当的ini文件的扩展行。

我不得不将extension=php_openssl.dll添加到位于xampp/php/php.ini 。 不知何故,它不是在那里,join后重新启动Apache一切工作正常。

只需在php.ini文件中添加两行即可。

 extension=php_openssl.dll allow_url_include = On 

它为我工作。

您的Apache可能没有编译SSL支持。 无论如何,使用cURL而不是file_get_contents。 试试这个代码,如果失败了,那么我是对的。

 function curl_get_contents($url) { $curl = curl_init($url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($curl); curl_close($curl); return $data; } 

我已经启用openssl扩展,它为我工作:)

;延长= php_openssl.dll

延长= php_openssl.dll

在我的情况下,这个问题是由于WAMP使用不同于php的php.ini而不是Apache,因此通过WAMP菜单进行的设置不适用于CLI。 只需修改CLI php.ini,它的工作原理。

在OpenSuse 12.1中,唯一需要的是:

 zypper in php5-openssl 

你可以使用这个function。

 function get_url_contents($url){ if (function_exists('file_get_contents')) { $result = @file_get_contents($url); } if ($result == '') { $ch = curl_init(); $timeout = 30; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $result = curl_exec($ch); curl_close($ch); } return $result; } 

对我来说,我不得不在php.ini中取消注释:

 extension=php_openssl.dll extension_dir = "ext" 

如果php_openssl.dll位于“ext”文件夹中,则“ext”适用。

注意:我必须为我的两个 php.ini文件执行此操作,否则它将无法工作。 一个位于vsphp安装文件夹中,另一个位于PHP文件夹中

 C:\Program Files (x86)\Jcx.Software\VS.Php\2013\Php 5.6 C:\Program Files (x86)\PHP\v5.6 

资源

经过一整天的探索之后,我想到了这个指南的答案: http : //piwigo.org/forum/viewtopic.php?id=15727

基本上在Eclipse – > Windows – > Preferences – > PHP Executables下,有一个关于.exe和.ini被引用的地方。 当您在“帮助”菜单中安装“日月食安装新软件”中的“PHP开发工具SDKfunction”时,默认的菜单位于Eclipse目录中。

因此,我添加了一个名为PHP 5.3.5(CGI)的新可执行文件,并引用了xampp的php文件夹中的cgi.exe和.ini文件。

谢谢webarto给你的时间来帮助我。

尝试这个:

 function curl($url){ $curl = curl_init($url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); **$buffer = curl_exec($curl);** curl_close($curl); **return $buffer;** } 

在MAC AMPPS上,我更新了下面的php-5.5.ini,现在它工作。

 allow_url_include = On extension=openssl.so 

我也有这个错误。 我发现我的PHP版本没有编译openssl,所以只需将扩展指令添加到php.ini中是不够的。 我不知道如何在你的特定情况下解决这个问题,但是对于我来说,我使用macports,命令只是:

 sudo port install php5-openssl 

我使用的是opsenSUSE Leap,而且我遇到了同样的问题 – 这意味着不支持OpenSSL。 这是我解决它的方法:

  1. 打开YaST。
  2. 去软件pipe理。
  3. 在左侧窗格的search框中input“php5-openssl”并按回车键。
  4. 单击右侧窗格中“php5-openssl”旁边的checkbox将其选中,然后单击“接受”(这增加了OpenSSL支持)。
  5. 重启Apache: sudo service apache2 restart

就是这样,你完成了。