it-swarm.com.ru

Не удалось найти упаковщик "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"] является 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 находится в папке 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 Script на 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 + прошел + вниз + в + 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-оболочка: нет оболочек: 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

126
John M

Я решил это в XAMPP, раскомментировав ;extension=php_openssl.dll в /Apache/bin/php.iniнесмотря на то, что phpinfo () сказал, что /php/php.ini был загруженным ini-файлом.

Правка: Я думаю, Ezra ответ является лучшим решением, непосредственно добавив строку расширения в соответствующий INI-файл.

170
kjetilh

Мне пришлось добавить extension=php_openssl.dll в мой файл php.ini, расположенный в xampp/php/php.ini. Как-то его там не было, после добавления и перезапуска Apache все работало нормально.

91
Ezra

просто добавьте две строки в ваш файл php.ini.

extension=php_openssl.dll
allow_url_include = On

это работает для меня.

31
Roopchand

Ваш 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;
}
18
Dejan Marjanovic

Я включил расширение openssl, и оно работает для меня :)

; extension = php_openssl.dll  

в

extension = php_openssl.dll

12
Saran Pal

в OpenSuse 12.1 требовалось только:

zypper in php5-openssl
6
TheSatinKnight

В моем случае проблема была в том, что WAMP использовал php.ini для CLI, отличный от Apache, поэтому ваши настройки, сделанные через меню WAMP, не относятся к CLI. Просто измените CLI php.ini, и это работает.

6
dtbarne

Мне пришлось раскомментировать эти строки в php.ini:

extension=php_openssl.dll
extension_dir = "ext"

«ext» применимо, если php_openssl.dll находится в папке «ext».

Примечание: Я должен был сделать это для two моих файлов php.ini, иначе это не сработало бы. Один находится в папке установки vs.php, а другой - в папке PHP

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

Источник

5
zeta

На MAC AMPPS я обновил php-5.5.ini следующим образом, и теперь он работает.

allow_url_include = On
extension=openssl.so
5
Elye

Вы можете использовать эту функцию вместо.

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

Проблема с file_get_contents для запросов https в Windows , раскомментируйте следующие строки в файле php.ini:

extension=php_openssl.dll
extension_dir = "ext"
3
Sandra

Я использую opsenSUSE Leap, и у меня была та же проблема - это означает, что нет поддержки OpenSSL. Вот как я решил это:

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

Вот и все, вы сделали.

2
mtchuente

Просматривая весь день, я разобрался с ответом благодаря этому руководству: http://piwigo.org/forum/viewtopic.php?id=15727

В основном в Eclipse -> Windows -> Preferences -> PHP Исполняемые файлы, есть раздел, где есть ссылки на .exe и .ini. По умолчанию они находились в каталоге Eclipse, когда вы устанавливали функцию PHP SDK инструментов разработки из Eclipses Install New Software в меню Help.

Поэтому вместо этого я добавил новый исполняемый файл PHP 5.3.5 (CGI) и сослался на cgi.exe и .ini из папки php в xampp.

Спасибо webarto за то, что вы уделили мне время.

2
John M

Для тех, кто использует Winginx (на основе nginx вместо Apache), я исправил это с помощью следующих 4 шагов:

  1. В меню Инструменты выберите Winginx PHP5 Config (не обращайте внимания на 5 в имени ...):

     Winginx PHP5 Config

  2. Выберите PHP версию, которую вы хотите изменить php.ini:

     PHP version selection

  3. На вкладке PHP Extensions выберите расширение php_openssl и нажмите кнопку Сохранить:

     php_openssl selection

  4. перезапустите соответствующую службу PHP через панель задач (Stop и Start):

     Restart PHP service

1
CPHPython

Попробуй это:

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

1
paprik

PHP7, в файле php.ini удалите «;» до extension=openssl

1
Shusen Yi

Я тоже получил эту ошибку. Я понял, что в моей версии PHP не было скомпилировано openssl, поэтому простого добавления директивы расширения в php.ini было недостаточно. Я не знаю, как вы должны решить эту проблему в вашем конкретном случае, но я использую macports, и команда была просто:

Sudo port install php5-openssl
1
mason

Если вы используете Wamp-сервер, перейдите к значку, нажмите на это  wamp server icon click on this

Затем перейдите в PHP, затем щелкните по расширению PHP, оттуда потребуется php_openssl, чтобы активировать его и перезапустить wamp-сервер  active php_openssl from here

0
ML680