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

110

Проблема в вопросе. Я провел тщательное исследование решений в отношении этого, и я знаю, что есть темы для этого, и я следил за ними тоже, и ничего не сработало. Это, как говорится, я точно перечислю все, что я сделал до сих пор. Я запускаю PHP 5.2.14 с Zend Debugging в последней версии Eclipse на моем компьютере под управлением Windows XP. У меня 1 ГБ ОЗУ. У меня XAMPP работает с Apache, MySQL и FileZilla.

В XAMPP я сделал следующее (во время этих изменений Apache отключился): Нажмите "Администратор" с панели управления XAMPP и перешел к https:// localhost/xampp/. Оттуда я принял сертификаты из этой строки на странице приветствия:

Для поддержки OpenSSL используйте тестовый сертификат с https://127.0.0.1 или https://localhost.

В этом же разделе я проверил phpinfo(). В разделе "Окружающая среда" SERVER["HTTPS"] есть on. В разделе "Apache Environment" 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, и они работают нормально. У меня также есть эта строка кода, введенная в конце script:

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 Script в 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=removed ИД 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

Теги:
https
openssl
xampp

14 ответов

160

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

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

  • 1
    Вы уверены, что его /apache/bin/php.ini я не могу найти в XAMPP Portable Light 1.8.1? Однако php/php.ini существует, но включение ssl здесь не помогает :(
  • 6
    на wamp я просто раскомментирую openssl и все работает :)
Показать ещё 2 комментария
90

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

  • 1
    была такая же проблема. это сработало.
  • 1
    Это сработало для меня! Спасибо
Показать ещё 2 комментария
28

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

extension=php_openssl.dll
allow_url_include = On

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

  • 7
    Я использую wamp, и вам нужно отредактировать php.ini в папке apache, а не в обычном каталоге PHP: O
16

Ваш 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;
}
  • 1
    запустил ту функцию curl, которую вы мне дали, и заменил $xmlresults = file_get_contents($urlquery); с $xmlresults = curl($urlquery); , PHP Script запустил его так же хорошо, как и file_get_contents (). Запуск его как веб-страницы PHP через localhost / tutorial / retrieve_website.php, и я получаю эту ошибку: Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
  • 1
    Проблема заключается в вероятности поддержки SSL, запустите phpinfo () и проверьте, есть ли следующие команды / флаги: '--with-openssl=/usr' '--with-openssl-dir=/usr' , в основном вам нужно скомпилировать Apache с поддержкой SSL вы также должны включить cURL, который в пару раз быстрее, чем FGC, и имеет множество опций. Я не знаю, как это сделать на Windows, извините.
Показать ещё 2 комментария
11

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

; extension = php_openssl.dll

к

расширение = php_openssl.dll

  • 2
    Работал для меня :)
6

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

  • 1
    Хорошо, как ты это сделал, где я могу найти CLI php.ini?
  • 1
    Шахта находится здесь: C:\path\to\wamp\bin\php\php5.3.10\php.ini
Показать ещё 1 комментарий
5

в OpenSuse 12.1 требуется только следующее:

zypper in php5-openssl
  • 1
    объясните пожалуйста??
  • 1
    Я имею в виду, что я получил сообщение об ошибке «Не удалось найти упаковщик« https »- вы забыли включить его при настройке PHP?» и решил ее, введя "zypper in php5-openssl" в командной строке. Это исправило ошибку.
4

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

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

Мне пришлось раскомментировать эти строки в 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

Источник

2

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

allow_url_include = On
extension=openssl.so
2

Попробуйте следующее:

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;**
}
  • 2
    Чем этот ответ отличается от ответа на этот вопрос ?
  • 0
    @HPierce имеет 2 строки, которые вызовут синтаксическую ошибку из-за оператора возведения в начало и конец этих строк ... Помечены для удаления.
Показать ещё 8 комментариев
2

После того, как я следил за ним весь день, я понял ответ благодаря этому руководству: 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 из папки xppp php.

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

1

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

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

Чтобы это сделать, вы закончили.

1

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

sudo port install php5-openssl

Ещё вопросы

Сообщество Overcoder
Наверх
Меню