問題は問題にあります。私はこれに関して解決策を徹底的に調査しましたが、これにはいくつかのトピックがあることを知っていますが、それらにも従いましたが、何も機能していません。そうは言っても、これまでにやったことすべてを正確にリストアップします。 Windows PHPコンピューター上の最新のEclipseバージョンでXP 5.2.14とZend Debuggingを実行しています。 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ファイルも開発用の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の起動後)にもかかわらず、EclipseおよびFirefoxのPHPスクリプトに http:// localhostで初めてアクセスすると、同じエラーが表示されます。 /tutorial/retrieve_website.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 + went + down + to + Georgia&alt = atom&num = 5)[function.file-get-contents]:開けませんでしたストリーム:C:\ xampp\htdocs\tutorial\retrieve_website.phpの行29にはそのようなファイルまたはディレクトリはありません
警告: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に関して調査したすべてのことを実行しました。
;extension=php_openssl.dll
の/Apache/bin/php.ini
のコメントを外すことでXAMPPで解決しましたdespitephpinfo()は、/php/php.ini
がロードされたiniファイルであると教えてくれました。
編集:エズラの答えは、適切なiniファイルに直接拡張行を追加する最良の解決策だと思います。
extension=php_openssl.dll
にあるphp.ini
ファイルにxampp/php/php.ini
を追加する必要がありました。どういうわけかそこにありませんでした。追加してApacheを再起動すると、すべてが正常に機能しました。
php.iniファイルに2行追加するだけです。
extension=php_openssl.dll
allow_url_include = On
私のために働いています。
あなたの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;
}
私はopensslの拡張を有効にしており、それは私のために動作します:)
; extension = php_openssl.dll
に
extension = php_openssl.dll
openSuse 12.1では、必要なものは次のとおりでした。
zypper in php5-openssl
私の場合、この問題は、Apacheとは異なるCLI用のphp.iniを使用するWAMPが原因であったため、WAMPメニューで行った設定はCLIに適用されません。 CLI php.iniを変更するだけで機能します。
私にとっては、php.iniの次の行のコメントを解除する必要がありました。
extension=php_openssl.dll
extension_dir = "ext"
「ext」は、php_openssl.dllが「ext」フォルダーにある場合に適用されます。
注:php.iniのtwoでこれを行わなければなりませんでしたそれ以外の場合は機能しません。 1つはvs.phpインストールフォルダーにあり、もう1つはPHPフォルダーにあります
C:\Program Files (x86)\Jcx.Software\VS.Php\2013\Php 5.6
C:\Program Files (x86)\PHP\v5.6
MAC AMPPSでは、php-5.5.iniを次のように更新しましたが、現在は動作します。
allow_url_include = On
extension=openssl.so
代わりにこの関数を使用できます。
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;
}
リクエストhttps Windowsの場合のfile_get_contentsの問題、php.iniファイルの次の行のコメントを外します。
extension=php_openssl.dll
extension_dir = "ext"
私はopsenSUSE Leapを使用していますが、同じ問題が発生しました。つまり、OpenSSLがサポートされていないということです。これは私がそれを解決した方法です:
Sudo service Apache2 restart
これで完了です。
PHP7、php.iniファイルで、「;」を削除しますextension=openssl
の前
一日中探し回った後、私はこのガイドのおかげで答えを見つけました: http://piwigo.org/forum/viewtopic.php?id=15727
基本的にEclipse-> Windows-> Preferences-> PHP Executablesの下に、.exeと.iniが参照されるセクションがあります。 EclipseからPHP Development Tools SDK Featureをインストールすると、デフォルトのデフォルトはEclipseディレクトリにありました。Helpメニューで新しいソフトウェアをインストールします。
その代わりに、PHP 5.3.5(CGI)という新しい実行可能ファイルを追加し、xamppのphpフォルダーからcgi.exeと.iniを参照しました。
Webarto、私を手伝ってくれてありがとう。
Winginx (Apacheベースではなくnginxベース)を使用している場合は、次の4つの手順で修正しました。
これを試して:
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;
}
私もこのエラーを受け取りました。私のバージョンのPHPにはopensslがコンパイルされていなかったため、php.iniに拡張ディレクティブを追加するだけでは不十分でした。特定のケースでこれを解決する方法がわかりませんが、私にとっては、macportsを使用し、コマンドは次のとおりでした。
Sudo port install php5-openssl
私の場合(FastCGIモードのWindows上のPHP 7.3)は、extension=openssl
のコメントを外していました。ほとんどの人がここに投稿しているように、extension =php _opensslではありません。
(同じことは ここに投稿 でしたが、OSの詳細がないため、ここで重要な違いがあります。)