Не удалось найти оболочку «https» – вы забыли включить ее при настройке PHP?

Проблема в этом. Я провел тщательное исследование решений в отношении этого, и я знаю, что есть темы для этого, и я следил за ними тоже, и ничего не сработало. Это, как говорится, я точно перечислю все, что я сделал до сих пор. Я запускаю 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 не поддерживается. Вот как я это решил:

  1. Открыть YaST.
  2. Перейдите к Software Management.
  3. В поле поиска на левой панели введите «php5-openssl» и нажмите клавишу возврата.
  4. Установите флажок рядом с «php5-openssl» в правой панели, чтобы выбрать его, и нажмите «Принять» (это добавляет поддержку OpenSSL).
  5. Перезапустить Apache: sudo service apache2 restart

Вот и все, все готово.