无法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 support
被disabled
(安装ext / openssl)。 我不知道如何启用Phar。
现在关于C:\ xampp中的文件本身,我去了PHP文件夹。 在生产和开发的php.ini文件(比对不起更安全)下,我有allow_url_fopen=On
, allow_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。 这是我解决它的方法:
- 打开YaST。
- 去软件pipe理。
- 在左侧窗格的search框中input“php5-openssl”并按回车键。
- 单击右侧窗格中“php5-openssl”旁边的checkbox将其选中,然后单击“接受”(这增加了OpenSSL支持)。
- 重启Apache:
sudo service apache2 restart
就是这样,你完成了。