问题在于问题。我已经对这方面的解决方案进行了彻底的调查,我知道有这方面的主题,我也跟着他们,没有任何工作。话虽如此,我会列出到目前为止我所做的一切。我在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环境”下,HTTPS
为On
。在“PHP变量”下,_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提供服务并且工作正常。我还在脚本末尾附近输入了这行代码:
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的所有研究工作
答案 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。这就是我解决它的方法:
sudo service apache2 restart
就是这样,你已经完成了。
答案 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个步骤修复了它:
答案 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)
答案 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
可以解决您的问题。