問題は質問にあります。私はこれに関して解決策を徹底的に調査し、これに関するトピックがあることも知っています。私もそれらに従ってきましたが、何も機能しませんでした。そうは言っても、これまでに行ったことをすべて正確にリストします。私は Windows XP コンピューターの最新バージョンの Eclipse で PHP 5.2.14 を Zend Debugging とともに実行しています。RAM は 1 GB あります。Apache、MySQL、FileZilla をインストールして XAMPP を実行しています。
XAMPPでは次の操作を実行しました(これらの変更中はApacheはオフでした):管理者XAMPP コントロール パネルから に移動し、 に移動しましたhttps:// localhost/xampp/
。そこから、ようこそページの次の行から証明書を受け入れました。
OpenSSL サポートの場合は、https:// 127.0.0.1 または https:// localhost でテスト証明書を使用してください。
同じセクションで、 を確認しましたphpinfo()
。「環境」の下にはSERVER["HTTPS"]
がありますon
。「Apache 環境」の下には がHTTPS
ありますOn
。「PHP 変数」の下には_SERVER["HTTPS"]
がありますOn
。「Phar」の下には(install ext/openssl)OpenSSL support
がありますdisabled
。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);
他にクエリを実行する Web サイトが 2 つありますが、これらは 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]: 入力として空の文字列が指定されました (C:\xampp\htdocs\tutorial\retrieve_website.php の 33 行目)
openssl: いいえ http ラッパー: はい https ラッパー: いいえ ラッパー: 配列 (10) { [0]=> 文字列 (3) "php" [1]=> 文字列 (4) "file" [2]=> 文字列 (4) "glob" [3]=> 文字列 (4) "data" [4]=> 文字列 (4) "http" [5]=> 文字列 (3) "ftp" [6]=> 文字列 (3) "zip" [7]=> 文字列(13) "compress.zlib" [8]=> 文字列(14) "compress.bzip2" [9]=> 文字列(4) "phar" }
私が見落としたり、できなかったことは何でしょうか? 私の知る限り、HTTPSとOpenSSLに関して調べたことはすべてやりました
ベストアンサー1
;extension=php_openssl.dll
XAMPPでコメントを外すことで解決しました/apache/bin/php.ini
にもかかわらずphpinfo() は、/php/php.ini
ロードされた ini ファイルであることを示しています。
編集:Ezra の回答は、適切な ini ファイルに拡張行を直接追加する最善の解決策だと思います。