IT-Swarm.Net

Não é possível encontrar o wrapper "https" - você esqueceu de ativá-lo quando configurou o PHP?

O problema está na questão. Eu fiz uma investigação completa para soluções em relação a isso e eu sei que há tópicos para isso e eu os segui também e nada funcionou. Dito isto, vou listar exatamente tudo o que fiz até agora. Eu estou executando PHP 5.2.14 com Zend Debugging na última versão do Eclipse no meu computador Windows XP. Eu tenho 1 GB de RAM. Eu tenho o XAMPP rodando com Apache, MySQL e FileZilla instalado. 

No XAMPP, fiz o seguinte (o Apache estava desativado durante essas alterações): Clicou em Admin no Painel de controle do XAMPP e foi para https:// localhost/xampp/. De lá eu aceitei os certificados desta linha na página de boas-vindas:

Para suporte ao OpenSSL, use o certificado de teste com https: // 127.0.0.1 ou https: // localhost.

Na mesma seção, verifiquei phpinfo(). Em 'Ambiente', SERVER["HTTPS"] é on. Em 'Ambiente Apache', HTTPS é On. Em 'PHP Variables, _SERVER["HTTPS"] é On. Em 'Phar', OpenSSL support é disabled (instale ext/openssl). Eu não sei como habilitar o farmaceutico.

Agora, com relação aos próprios arquivos em C:\xampp, fui para a pasta PHP. Em ambos os arquivos php.ini de produção e desenvolvimento (melhor prevenir do que remediar), eu tenho allow_url_fopen=On, allow_url_include=On, e eu removi o ponto-e-vírgula, para que extension=php_openssl.dll não seja mais comentada. Eu até confirmei que o arquivo .dll está na pasta ext da pasta PHP. Ambos libeay32.dll e ssleay32.dll estão nas pastas PHP e Apache. A pasta Apache não contém arquivos php.ini produtivos ou de desenvolvimento.

Eu fui para http://www.slproweb.com/products/Win32OpenSSL.html e instalei o Win32 OpenSSL v1.0.0d para medida segura.

Agora a linha de código em questão no meu retrieve_website.php se parece com isso:

$urlquery = "https://www.googleapis.com/customsearch/v1?key=".$appid."&cx=".$google_searchid."&q=".$query."&alt=atom&num=".$results;
$xmlresults = file_get_contents($urlquery);

Eu tenho dois outros sites que eu consultar, mas eles são servidos via HTTP e funcionam bem. Eu também tenho essa linha de código inserida perto do final do 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);

Quando eu o executo como um script PHP no Eclipse, tudo sai perfeitamente bem do jeito que eu quero junto com estes resultados:

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

Apesar de todas essas alterações que fiz (depois de iniciar o Apache), ainda recebo os mesmos erros na primeira vez que acesso meu script PHP no Eclipse e no Firefox via http: // localhost/tutorial/retrieve_website .php :

Atenção: file_get_contents () [function.file-get-contents]: Não foi possível encontrar o wrapper "https" - você esqueceu de habilitá-lo quando configurou o PHP? em C:\xampp\htdocs\tutorial\retrieve_website.php na linha 29

Aviso: file_get_contents (https://www.googleapis.com/customsearch/v1?key=ID da API removida & cx = ID da pesquisa removida & q = O + Diabo + foi + desativado + para + Georgia & alt = atom & num = 5) [função.file-get-contents]: falha ao abrir fluxo: Nenhum arquivo ou diretório em C:\xampp\htdocs\tutorial\retrieve_website.php na linha 29

Atenção: DOMDocument :: loadXML () [domdocument.loadxml]: Cadeia vazia fornecida como entrada em C:\xampp\htdocs\tutorial\retrieve_website.php na linha 33

openssl: não há wrapper http: sim https wrapper: não wrappers: array (10) {[0] => string (3) "php" [1] => string (4) "arquivo" [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"} 

O que é que negligenciei ou deixei de fazer? Pelo meu conhecimento, fiz tudo o que pesquisei sobre HTTPS e OpenSSL

126
John M

Eu resolvi isso no XAMPP removendo o comentário de ;extension=php_openssl.dll em /Apache/bin/php.iniregardless phpinfo () me dizendo que /php/php.ini era o arquivo ini carregado.

EDIT: Eu acho que Ezra resposta é a melhor solução diretamente adicionando a linha de extensão para o arquivo ini apropriado.

170
kjetilh

Eu tive que adicionar extension=php_openssl.dll ao meu arquivo php.ini localizado em xampp/php/php.ini. De alguma forma, não estava lá, depois de adicioná-lo e reiniciar o Apache, tudo estava funcionando bem.

91
Ezra

basta adicionar duas linhas no seu arquivo php.ini.

extension=php_openssl.dll
allow_url_include = On

está funcionando para mim.

31
Roopchand

Seu Apache provavelmente não é compilado com suporte a SSL. Use cURL em vez de file_get_contents de qualquer maneira. Tente este código, se falhar, então estou certo.

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

Eu habilitei a extensão openssl e funcionou para mim :)

; extension = php_openssl.dll  

para

extension = php_openssl.dll

12
Saran Pal

no OpenSuse 12.1, a única coisa necessária era:

zypper in php5-openssl
6
TheSatinKnight

No meu caso, o problema foi devido ao WAMP usando um php.ini diferente para o CLI que o Apache, então suas configurações feitas através do menu WAMP não se aplicam ao CLI. Apenas modifique o CLI.ini da CLI e ele funciona.

6
dtbarne

Para mim eu tive que descomentar essas linhas no php.ini:

extension=php_openssl.dll
extension_dir = "ext"

"ext" é aplicável se php_openssl.dll estiver localizado na pasta "ext".

Nota: Eu tive que fazer isso para dois dos meus arquivos php.ini caso contrário não funcionaria. Um localizado na pasta de instalação vsphp, e o outro na pasta PHP

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

Fonte

5
zeta

No MAC AMPPS, atualizei o php-5.5.ini com o seguinte e agora funciona.

allow_url_include = On
extension=openssl.so
5
Elye

Você pode usar esta função.

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

Problema com o file_get_contents para os pedidos https no Windows , remova o comentário das seguintes linhas no arquivo php.ini:

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

Estou usando o opsenSUSE Leap e tive o mesmo problema - significa que não há suporte para o OpenSSL. Foi assim que resolvi:

  1. Abra o YaST.
  2. Vá para o Gerenciamento de Software.
  3. Na caixa de pesquisa no painel esquerdo, digite 'php5-openssl' e pressione a tecla de retorno.
  4. Clique na caixa de seleção ao lado de 'php5-openssl' no painel direito para selecioná-lo e clique em 'Aceitar' (Isso adiciona suporte ao OpenSSL).
  5. Reinicie o Apache: Sudo service Apache2 restart

É isso aí, você está feito.

2
mtchuente

Depois de bisbilhotar o dia todo, descobri a resposta graças a este guia: http://piwigo.org/forum/viewtopic.php?id=15727

Basicamente sob o Eclipse -> Windows -> Preferences -> PHP Executáveis, existe uma seção sobre onde o .exe e o .ini são referenciados. Os defaults estavam no diretório Eclipse quando você instala o recurso PHP Development Tools SDK dos Eclipses Install New Software no menu Help.

Então, ao invés disto, eu adicionei um novo executável chamado PHP 5.3.5 (CGI) e referenciei o cgi.exe e .ini da pasta php do xampp.

Obrigado webarto por dar o seu tempo para me ajudar.

2
John M

Tente isto:

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, no arquivo php.ini, remova o ";" antes extension=openssl

1
Shusen Yi

Eu também recebi esse erro. Eu descobri que a minha versão do PHP não tinha o openssl compilado, então simplesmente adicionar a diretiva de extensão ao php.ini não era suficiente. Eu não sei como você tem que resolver isso em seu caso particular, mas para mim, eu uso macports, e o comando era apenas:

Sudo port install php5-openssl
1
mason

Se você estiver usando o servidor wamp, vá ao ícone, clique neste wamp server icon click on this

Em seguida, vá para PHP e clique na extensão PHP, haverá php_openssl precisa ativar a partir daí e reiniciar o servidor wamp active php_openssl from here

0
ML680