Проблема в этом. Я провел тщательное исследование решений в отношении этого, и я знаю, что есть темы для этого, и я следил за ними тоже, и ничего не сработало. Это, как говорится, я точно перечислю все, что я сделал до сих пор. Я запускаю PHP 5.2.14 с Zend Debugging в последней версии Eclipse на моем компьютере под управлением Windows XP. У меня 1 ГБ ОЗУ. У меня XAMPP работает с Apache, MySQL и FileZilla.
 На XAMPP я сделал следующее (во время этих изменений Apache отключился): нажал на Admin из панели управления XAMPP и перешел на https:// localhost/xampp/ .  Оттуда я принял сертификаты из этой строки на странице приветствия: 
Для поддержки OpenSSL используйте тестовый сертификат с https: // 127.0.0.1 или https: // localhost.
  В этом же разделе я проверил phpinfo() .  В разделе «Окружающая среда» SERVER["HTTPS"] .  В разделе «Apache Environment» HTTPS .  В разделе «Переменные 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 находится в папке ext папки PHP.  Оба файла 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); 
Когда я запускаю его как скрипт PHP на Eclipse, все выводит отлично, как я хочу, вместе с этими результатами:
 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), я все равно получаю те же ошибки при первом доступе к моему скрипту PHP в Eclipse и Firefox через 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 и cx = удаленный идентификатор поиска & q = + Devil + go + 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: no http wrapper: yes https wrapper: no wrappers: array (10) {[0] => string (3) "php" [1] => string (4) "file" [2] => string (4 ) «glob» [3] => строка (4) «данные» [4] => строка (4) «http» [5] => строка (3) «ftp» [6] => строка (3) " zip "[7] => string (13)" compress.zlib "[8] => string (14)" compress.bzip2 "[9] => string (4)" phar "}
Что я забыл или не сделал? Насколько мне известно, я сделал все, что я исследовал относительно HTTPS и OpenSSL
  Я решил его в XAMPP, раскомментируя ;extension=php_openssl.dll в /apache/bin/php.ini несмотря на то, что phpinfo () говорит мне, что /php/php.ini был загруженным ini-файлом. 
EDIT: Я думаю, что ответ Ezra – лучшее решение, непосредственно добавляющее линию расширения к соответствующему ini-файлу.
  Мне пришлось добавить extension=php_openssl.dll в файл php.ini расположенный в xampp/php/php.ini .  Как-то его там не было, после добавления его и перезапуска Apache все работало нормально. 
просто добавьте две строки в файл php.ini.
 extension=php_openssl.dll allow_url_include = On 
он работает для меня.
Возможно, ваш 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; } 
Я включил расширение openssl, и он работает для меня 🙂
; расширение = php_openssl.dll
в
расширение = php_openssl.dll
В моем случае проблема была связана с WAMP с использованием другого php.ini для CLI, чем Apache, поэтому ваши настройки, сделанные в меню WAMP, не относятся к CLI. Просто измените CLI php.ini, и он работает.
в OpenSuse 12.1 требовалось только следующее:
 zypper in php5-openssl 
Вместо этого вы можете использовать эту функцию.
 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; } 
Для меня мне пришлось раскомментировать эти строки в php.ini:
 extension=php_openssl.dll extension_dir = "ext" 
«ext» применим, если php_openssl.dll находится в папке «ext».
Примечание. Мне пришлось сделать это для двух моих файлов php.ini, иначе это не сработало. Один находится в папке установки vs.php, а другой – в папке PHP
 C:\Program Files (x86)\Jcx.Software\VS.Php\2013\Php 5.6 C:\Program Files (x86)\PHP\v5.6 
Источник
После того, как я проверил весь день, я понял ответ благодаря этому руководству: http://piwigo.org/forum/viewtopic.php?id=15727
В основном под Eclipse -> Windows -> Preferences -> PHP Executables, есть раздел, на котором ссылаются .exe и .ini. По умолчанию они были в каталоге Eclipse, когда вы устанавливаете функцию SDK для инструментов разработки PHP из Eclipses Install New Software в меню «Справка».
Поэтому вместо этого я добавил новый исполняемый файл под названием PHP 5.3.5 (CGI) и ссылался на cgi.exe и .ini из папки php xampp.
Спасибо webarto за то, что уделили вам время, чтобы помочь мне.
Попробуй это:
 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;** } 
На MAC AMPPS я обновил php-5.5.ini следующим образом, и теперь он работает.
 allow_url_include = On extension=openssl.so 
Я тоже получил эту ошибку. Я понял, что в моей версии PHP не было скомпилировано openssl, поэтому просто добавить директиву расширения в php.ini было недостаточно. Я не знаю, как вы должны решить это в своем конкретном случае, но для меня я использую macports, и команда была просто:
 sudo port install php5-openssl 
Я использую opsenSUSE Leap, и у меня была такая же проблема – это означает, что OpenSSL не поддерживается. Вот как я это решил:
sudo service apache2 restart Вот и все, все готово.