找不到包装器“https” - 在配置PHP时忘记启用它了吗?

2022-08-30 06:40:29

问题出在问题所在。我已经对此进行了彻底的调查,以获取有关此的解决方案,我知道有这方面的主题,我也遵循了它们,但没有任何效果。话虽如此,我将列出到目前为止我所做的一切。我正在Windows XP计算机上的最新Eclipse版本上运行带有Zend Debugging的PHP 5.2.14。我有1 GB的内存。我有XAMPP运行Apache,MySQL和FileZilla安装。

在 XAMPP 上,我完成了以下操作(Apache 在这些更改期间处于关闭状态):单击 XAMPP 控制面板中的“管理”,然后转到 。从那里,我接受了欢迎页面上这一行的证书:https:// localhost/xampp/

对于 OpenSSL 支持,请使用带有 https:// 127.0.0.1 或 https:// 本地主机的测试证书。

在同一部分,我检查了.在“环境”下,是 。在“Apache环境”下,是 。在“PHP 变量”下,是 。在“Phar”下,是(安装 ext/openssl)。我不知道如何启用Phar。phpinfo()SERVER["HTTPS"]onHTTPSOn_SERVER["HTTPS"]OnOpenSSL supportdisabled

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

我已经去了 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提供的,它们工作正常。我还在脚本末尾附近输入了这行代码:

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"
}

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

警告:file_get_contents() [function.file-get-content]:找不到包装器“https” - 在配置PHP时忘记启用它了吗?在 C:\xampp\htdocs\tutorial\retrieve_website.php 第 29

行警告:file_get_contents(https:// www.googleapis.com/customsearch/v1?key=已删除的 API ID&cx=已删除的搜索 ID&q=The+Devil+went+down+to+Georgia&alt=atom&num=5) [function.file-get-contents]: 无法打开流:在第 29

行的 C:\xampp\htdocs\tutorial\retrieve_website.php 中没有这样的文件或目录 警告: DOMDocument::loadXML() [domdocument.loadxml]: 在 C:\xampp\htdocs\tutorial\retrieve_website.php 第 33

行中作为输入提供的空字符串 openssl: no http wrapper: yes https wrapper: no wrappers: no wrappers: array(10) { [0]=> string(3) “php” [1]=> string(4) “file” [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) “bzip2” [ compress9]=> string(4) “phar” }

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


答案 1

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

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


答案 2

我不得不添加到位于 中的文件。不知何故,它不存在,在添加它并重新启动Apache之后,一切都运行良好。extension=php_openssl.dllphp.inixampp/php/php.ini


推荐