ラッパー「https」が見つからない-PHPを構成するときにラッパーを有効にするのを忘れましたか?


143

問題は問題です。私はこれに関して解決策を徹底的に調査しましたが、これにはトピックがあり、私もそれらに従ってきましたが、何もうまくいきませんでした。そうは言っても、これまでに行ったすべてを正確にリストアップします。私のWindows XPコンピューターの最新のEclipseバージョンでZend Debuggingを使用してPHP 5.2.14を実行しています。1 GBのRAMがあります。Apache、MySQL、FileZillaをインストールしてXAMPPを実行しています。

XAMPPで私は次のことを行いました(これらの変更中、Apacheはオフになりました):XAMPPコントロールパネルから[ 管理]をクリックし、に移動しましたhttps:// localhost/xampp/。そこから、ウェルカムページのこの行の証明書を受け入れました。

OpenSSLサポートについては、https:// 127.0.0.1またはhttps:// localhostでテスト証明書を使用してください。

同じセクションで私はチェックしましたphpinfo()。「環境」の下にSERVER["HTTPS"]ありonます。「Apache Environment」の下でHTTPSは、ですOn。'PHP変数の下で_SERVER["HTTPS"]は、ですOn。「Phar」の下OpenSSL supportは、disabled(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);

クエリを実行する他の2つのWebサイトがありますが、それらは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を構成するときにラッパーを有効にするのを忘れていませんか?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 + going + down + to + Georgia&alt = atom&num = 5)[function.file-get-contents]:ストリームを開けませんでした:C:\ xampp \ htdocs \ tutorial \ retrieve_website.phpの29行目でそのようなファイルまたはディレクトリはありません

警告: DOMDocument :: loadXML()[domdocument.loadxml]:C:\ xampp \ htdocs \ tutorial \ retrieve_website.phpの33行目の入力として空の文字列が指定されています

openssl:いいえhttpラッパー:はいhttpsラッパー:いいえラッパー:いいえ(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に関して調査したすべてのことを行いました

回答:


183

phpinfo()がロードされたiniファイルであると告げる;extension=php_openssl.dll/apache/bin/php.ini もかかわらず、コメントを外してXAMPPでそれを解決しました/php/php.ini

編集:私はエズラの答えが適切なiniファイルに拡張行を直接追加する最良の解決策だと思います。


1
あなたは必ずそのことをしている/apache/bin/php.ini、私はXAMPPポータブルライト1.8.1でそれを見つけることができませんか?しかしphp/php.ini存在するが、ここでは、SSLを有効にすると、ヘルプ:(ません
vine'th

1
opensslが無効になり、セキュリティで保護されたリンクをget_file_contentsするとエラーがスローされるため、この回答では別の問題が発生します
thedjaney

5
私にとってはxampp/php/php.ini:)ありがとう、PS:
変更を保存した後、

97

にあるファイルに追加extension=php_openssl.dllするphp.ini必要がありましたxampp/php/php.ini。どういうわけか、それを追加してApacheを再起動した後、すべてが正常に機能していました。


2
php.iniにはないため、行を追加する必要がありましたが、トリックを追加しました-ありがとう!
Q Studio

33

php.iniファイルに2行追加するだけです。

extension=php_openssl.dll
allow_url_include = On

それは私のために働いています。


7
私はWAMPを使用していて、あなたが編集にApacheのフォルダ内のphp.ini PHPフォルダ内ではなく通常のいずれかが必要:O
Al_

ありがとう、それはallow_url_include = On私のためにそれを解決した。
Kiee

allow_url_includeを有効にしないでください。これにより、サーバーが脆弱になります。
Pascal9x

18

あなたのApacheはおそらくSSLサポートでコンパイルされていません。とにかく、file_get_contentsの代わりにcURLを使用します。このコードを試してください。失敗した場合、私は正しいです。

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

1
あなたが私に与えたcurl関数を実行し、に置き換え$xmlresults = file_get_contents($urlquery);ました$xmlresults = curl($urlquery);。PHPスクリプトは問題なく実行され、file_get_contents()と同じ結果が得られました。経由でPHP Webページとしてそれを実行するローカルホスト/チュートリアル/ retrieve_website.phpと、私はこのエラーを取得:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
ジョン・M

1
問題はSSLサポートの問題です。phpinfo ()を実行し、次のコマンド/フラグがあるかどうかを確認します'--with-openssl=/usr' '--with-openssl-dir=/usr'。基本的に、SSLサポートを使用してApacheをコンパイルする必要があります。また、FGCよりも数倍速いcURLを有効にする必要があり、多数のオプションがあります。Windowsでこれを行う方法はわかりません。
DejanMarjanović2011年

1
これに近いのは、phpinfo()の上部にあるConfigureコマンドだけで、関連する--with-opensslを含むものはありません。それには他のものが含まれています。小さな更新:ローカルホストでステータスをチェックし、HTTPS(SSL)がアクティブ化されていることを示しています。
John M

1
を呼び出すreturn curl_exec($curl);curl_close($curl);、次の行の実行が妨げられませんか?
ジェイソンプランク

12

私はopenssl拡張を有効にしており、それは私のために機能します:)

; extension = php_openssl.dll

extension = php_openssl.dll


6

私の場合、問題はWAMPがCLIに対してApacheとは異なるphp.iniを使用していたため、WAMPメニューから行った設定はCLIに適用されません。CLI php.iniを変更するだけで機能します。


1
CLI php.iniはどこにありますか
botenvouwer

1
鉱山はここにあります:C:\path\to\wamp\bin\php\php5.3.10\php.ini
dtbarne 2013年

2
あなたの答えをありがとう、私はそこに複数のphp.iniファイルがあると思いました。検索したところ、1つしか見つかりませんでした。コメントを外しました:; extension = php_openssl.dllしかし、私はxammpを使用しています。今ではうまくいきます!
botenvouwer 2013年

6

OpenSuse 12.1で必要なことは次のとおりです。

zypper in php5-openssl

1
説明していただけますか?
Jason W

1
「ラッパー「https」が見つかりません-PHPを構成するときにラッパーを有効にするのを忘れましたか?」というエラーメッセージが表示されたことを意味します。コマンドラインで「php5-opensslのzypper」と入力して解決しました。これでエラーが修正されました。
TheSatinKnight 2014年

5

私にとっては、php.iniのこれらの行のコメントを外す必要がありました。

extension=php_openssl.dll
extension_dir = "ext"

「ext」は、php_openssl.dllが「ext」フォルダーにある場合に適用されます。

注:これを2つのphp.iniファイルに対して行う必要がありました。そうしないと機能しません。1つはvs.phpインストールフォルダーにあり、もう1つはPHPフォルダーにあります

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

ソース


5

MAC AMPPSで、php-5.5.iniを次のように更新しました。

allow_url_include = On
extension=openssl.so

5

私の場合(FastCGIモードのWindows上のPHP 7.3)はコメント解除されましたextension=openssl。ほとんどの人はここに投稿しないため、extension = php_ opensslではありません。

(同じものがここ掲載されましたが、OSの詳細がないため、ここで重要な違いになる可能性があります。)


4

PHP7のphp.iniファイルで、「;」を削除します 前extension=openssl


4

Windowsの httpsリクエストのfile_get_contentsに問題がある場合は、php.iniファイルの次の行のコメントを外してください。

extension=php_openssl.dll
extension_dir = "ext"

4

curlがシステムにインストールされている場合は、代わりにこの関数を使用できます。

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

2

一日中調べた後、私はこのガイドのおかげで答えを見つけました:http : //piwigo.org/forum/viewtopic.php?id=15727

基本的にEclipse-> Windows-> Preferences-> PHP Executablesの下に、.exeと.iniが参照されるセクションがあります。HelpメニューのEclipses Install New SoftwareからPHP Development Tools SDK Featureをインストールすると、デフォルトのものがEclipseディレクトリにありました。

そこで、代わりに、PHP 5.3.5(CGI)と呼ばれる新しい実行可能ファイルを追加し、xamppのphpフォルダーからcgi.exeと.iniを参照しました。

私を助けるためにあなたの時間を与えてくれたwebartoに感謝します。


2

私はopsenSUSE Leapを使用していますが、同じ問題が発生しました。これは、OpenSSLがサポートされていないことを意味します。これは私がそれを解決した方法です:

  1. YaSTを開きます。
  2. ソフトウェア管理に移動します。
  3. 左側のペインの検索ボックスに「php5-openssl」と入力し、Returnキーを押します。
  4. 右側のペインの「php5-openssl」の横にあるチェックボックスをクリックして選択し、「承認」をクリックします(これによりOpenSSLサポートが追加されます)。
  5. Apacheを再起動します。 sudo service apache2 restart

これで完了です。


1

私もこのエラーを受け取りました。私のバージョンのPHPにはopensslが組み込まれていないことがわかったので、単純にphp.iniに拡張ディレクティブを追加するだけでは不十分でした。特定のケースでこれをどのように解決する必要があるのか​​わかりませんが、私はmacportsを使用しており、コマンドは次のとおりです。

sudo port install php5-openssl

1

Winginx(Apacheベースではなくnginxベース)を使用している場合は、次の4つの手順で修正しました。

  1. [ ツール ]メニューで、Winginx PHP5 Configをクリックします(名前の5を気にしないでください...):

    Winginx PHP5設定

  2. php.iniで変更するPHPバージョンを選択します。

    PHPバージョンの選択

  3. 上のPHP拡張機能 ]タブを選択しphp_opensslの拡張をし、ヒット保存 ]ボタンを:

    php_opensslの選択

  4. タスクバーから適切なPHPサービスを再起動します(停止および開始):

    PHPサービスを再起動します


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


2
これは、すでにこの質問にあるこの回答 どう違うのですか?
HPierce 2016年

@HPierceには2つの行があり、これらの行の最初と最後に指数演算子があるため構文エラーが発生します...削除のフラグが付けられています。
CPHPython 2018

@CPHPython コードブロック内で太字スタイルを使用しようとしたと思います
Nick

1
@CPHPython、コードを太字にすることはできますが、別の構文を使用する必要があります... <code> <pre>通常のコードを実行する場合... *を使用した太字コード </ pre> </ code> :-)。どうやら私は2016年にそれを編集していなかったか、知らなかったようです。とにかく、私はそれが削除されてうれしいです。
HPierce 2018

1
@ニック、あなたは大胆なコードを書くことができます!どこにも文書化されているとは思いません。ここでは例としてそれを実行しましたが、これはまだ削除されると思います。
HPierce 2018

0

wampサーバーを使用している場合は、アイコンをクリックしてこれをクリックします ワンプサーバーアイコンをクリックしてください

次に、PHPに移動し、PHP拡張をクリックします。そこからphp_opensslをアクティブ化して、Wampサーバーを再起動する必要があります。 ここからアクティブなphp_openssl


-1

simple_html_dom.php内で、$offset変数の値をから-1に変更します0。このエラーは通常、PHP 7に移行したときに発生します

HtmlDomParser::file_get_htmlはデフォルトのオフセットを使用します。-1渡すと0問題が解決します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.