无法找到包装" https" - 你在配置PHP时忘了启用它吗?

时间:2011-03-26 18:14:41

标签: php apache https openssl xampp

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

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

  

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

在同一部分,我检查了phpinfo()。在“环境”下,SERVER["HTTPS"]on。在“Apache环境”下,HTTPSOn。在“PHP变量”下,_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提供服务并且工作正常。我还在脚本末尾附近输入了这行代码:

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-contents]:无法找到包装器“https” - 您是否忘记在配置PHP时启用它?在第29行的C:\ xampp \ htdocs \ tutorial \ retrieve_website.php中

  警告:file_get_contents(https:// www.googleapis.com/customsearch/v1?key=删除的API ID & cx = 已移除的搜索ID & q = The + Devil + go + down + to + Georgia& alt = atom& num = 5)[function.file-get-contents]:无法打开流:C:\ xampp \ htdocs \ tutorial \ retrieve_website中没有这样的文件或目录。第29行的php

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

  openssl:no http wrapper:yes https wrapper: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)“compress.bzip2”[9] => string(4)“phar”}

我忽略或未能做到的是什么?据我所知,我已经完成了有关HTTPS和OpenSSL的所有研究工作

21 个答案:

答案 0 :(得分:171)

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

编辑:我猜Ezra答案是直接将扩展行添加到相应的ini文件中的最佳解决方案。

答案 1 :(得分:94)

我必须将extension=php_openssl.dll添加到位于php.ini的{​​{1}}文件中。不知怎的,它不存在,在添加它并重新启动Apache之后一切正常。

答案 2 :(得分:32)

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

extension=php_openssl.dll
allow_url_include = On

它为我工作。

答案 3 :(得分:18)

您的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;
}

答案 4 :(得分:12)

我启用了openssl扩展,它对我有用:)

; extension = php_openssl.dll

<强>延长= php_openssl.dll

答案 5 :(得分:6)

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

答案 6 :(得分:6)

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

zypper in php5-openssl

答案 7 :(得分:5)

在MAC AMPPS上,我用以下内容更新了php-5.5.ini,现在它可以正常工作。

allow_url_include = On
extension=openssl.so

答案 8 :(得分:4)

您可以改用此功能。

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

答案 9 :(得分:3)

在Windows中,对于https << strong>请求,存在file_get_contents问题,请取消注释php.ini文件中的以下几行:

extension=php_openssl.dll
extension_dir = "ext"

答案 10 :(得分:2)

在整天窥探之后,由于本指南,我找到了答案: http://piwigo.org/forum/viewtopic.php?id=15727

基本上在Eclipse下 - &gt; Windows - &gt;偏好 - &gt; PHP可执行文件,有一节介绍.exe和.ini的引用。当您从“帮助”菜单中的“日食安装新软件”安装PHP开发工具SDK功能时,默认目录位于Eclipse目录中。

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

感谢webarto给我时间帮助我。

答案 11 :(得分:2)

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

  1. 打开YaST。
  2. 转到软件管理。
  3. 在左侧窗格的搜索框中,输入“php5-openssl”并按返回键。
  4. 点击右侧窗格中“php5-openssl”旁边的复选框将其选中,然后点击“接受”(这会添加OpenSSL支持)。
  5. 重启Apache:sudo service apache2 restart
  6. 就是这样,你已经完成了。

答案 12 :(得分:2)

PHP7,在php.ini文件中,删除“;”在extension=openssl之前

答案 13 :(得分:1)

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

sudo port install php5-openssl

答案 14 :(得分:1)

对于那些使用Winginx(基于nginx而不是基于Apache)的人,我用这4个步骤修复了它:

  1. 工具菜单上点击 Winginx PHP5配置(不要介意名称中的 5 ):< / p>

    Winginx PHP5 Config

  2. 选择您希望 php.ini 更改的PHP版本:

    PHP version selection

  3. PHP Extensions 标签上,选择 php_openssl 扩展程序,然后点击保存按钮:

    php_openssl selection

  4. 通过任务栏重新启动相应的PHP服务(停止启动):

    Restart PHP service

答案 15 :(得分:1)

试试这个:

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

答案 16 :(得分:0)

如果您使用的是wamp服务器,请转到图标,点击此wamp server icon click on this

然后转到PHP,然后单击PHP扩展,将需要php_openssl从那里激活并重新启动wamp服务器active php_openssl from here

答案 17 :(得分:0)

就我而言(在Windows上,在FastCGI模式下为PHP 7.3),它没有注释extension=openssl。 并非大多数人在此处发布的 extension = php _ openssl

(同一件事是posted here,但没有关于操作系统的详细信息,这可能是关键的区别。)

答案 18 :(得分:0)

在Windows上较新版本的PHP上,由于相应的配置行已更改,因此此处的大多数答案均无效。

对于PHP 7.x,您需要取消注释(删除该行开头的 ListTile( onTap: () { Scrollable.ensureVisible(headLineKeyList[0].currentContext, duration: const Duration(milliseconds: 500)); }, )以下几行:

import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: MyStotry(), ); } } class MyStotry extends StatefulWidget { @override _MyStotryState createState() => _MyStotryState(); } class _MyStotryState extends State<MyStotry> { List<GlobalKey> headLineKeyList = [ GlobalKey(), GlobalKey(), GlobalKey(), GlobalKey(), GlobalKey() ]; ScrollController _scrollController = ScrollController(); @override Widget build(BuildContext context) { SystemChrome.setEnabledSystemUIOverlays([]); return Scaffold( appBar: AppBar( backgroundColor: Color(0xFF41407C), title: Text('The Story of ANU'), ), endDrawer: Drawer( child: Container( child: ListView( children: <Widget>[ Container( height: 250, child: DrawerHeader( decoration: BoxDecoration(color: Color(0xFF41407C)), child: Stack( children: <Widget>[ Center( child: Text( 'Table of Content', style: TextStyle( color: Color(0xFFF8F8F8), fontSize: 20.0), ), ), ], ), ), ), ListTile( onTap: () { Scrollable.ensureVisible(headLineKeyList[0].currentContext, duration: const Duration(milliseconds: 500)); }, title: Text('Headline One')), ListTile( onTap: () { Scrollable.ensureVisible(headLineKeyList[1].currentContext, duration: const Duration(milliseconds: 500)); }, title: Text('Headline Two')), ListTile( onTap: () { Scrollable.ensureVisible(headLineKeyList[2].currentContext, duration: const Duration(milliseconds: 500)); }, title: Text('Headline Three')), ListTile( onTap: () { Scrollable.ensureVisible(headLineKeyList[3].currentContext, duration: const Duration(milliseconds: 500)); }, title: Text('Headline Four')), ListTile( onTap: () { Scrollable.ensureVisible(headLineKeyList[4].currentContext, duration: const Duration(milliseconds: 500)); }, title: Text('Headline Five')), ListTile(onTap: () {}, title: Text('Headline Six')), ListTile(onTap: () {}, title: Text('Headline Seven')), ListTile(onTap: () {}, title: Text('Headline Eight')), ListTile(onTap: () {}, title: Text('Headline Nine')), ListTile(onTap: () {}, title: Text('Headline Ten')), ListTile(onTap: () {}, title: Text('Headline Eleven')), ], ), ), ), body: SingleChildScrollView( controller: _scrollController, child: Padding( padding: EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Headline1(key: headLineKeyList[0], headline1: 'Headline One'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. '), Headline2(key: headLineKeyList[1], headline2: 'Headline Two'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'), Headline2(key: headLineKeyList[2], headline2: 'Headline Three'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. '), Headline2(key: headLineKeyList[3], headline2: 'Headline Four'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. '), Headline2(key: headLineKeyList[4], headline2: 'Headline Five'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'), Content( content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. '), ], ), ), ), ); } } class Headline1 extends StatelessWidget { Headline1({Key key, this.headline1}) : super(key: key); final String headline1; @override Widget build(BuildContext context) { return Text( headline1, style: TextStyle( fontWeight: FontWeight.w800, fontSize: 22, fontFamily: 'Georgia', color: Color(0xFF010101), ), textAlign: TextAlign.center, ); } } class Headline2 extends StatelessWidget { Headline2({Key key, this.headline2}) : super(key: key); final String headline2; @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.only(top: 10, bottom: 10), child: Text( headline2, style: TextStyle( fontFamily: 'Georgia', fontWeight: FontWeight.w800, fontSize: 18, color: Color(0xFF010101), ), textAlign: TextAlign.center, ), ); } } class Content extends StatelessWidget { Content({this.content}); final String content; @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.only(bottom: 10), child: Text( content, style: TextStyle( height: 1.5, fontFamily: "Georgia", fontSize: 15.0, color: Color(0xFF010101), ), textAlign: TextAlign.justify, ), ); } }
;

答案 19 :(得分:0)

在Windows上尝试使用php cli安装composer时出现此错误。为了解决这个问题,我只需要更改php.ini中的扩展目录。我不得不取消注释此行:

; On windows:
extension_dir = "ext"

然后这一切都起作用了

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
;...
extension=openssl

答案 20 :(得分:-1)

simple_html_dom.php 中,将$offset变量的值从-1更改为0。 迁移到 PHP 7时,通常会发生此错误。

HtmlDomParser::file_get_html使用-1的默认偏移量,传入0可以解决您的问题。