No se puede encontrar el contenedor "https": ¿olvidó habilitarlo cuando configuró PHP?

144

El problema está en la pregunta. He realizado una investigación exhaustiva para encontrar soluciones con respecto a esto y sé que hay temas al respecto y los he seguido también y nada ha funcionado. Dicho esto, enumeraré exactamente todo lo que he hecho hasta ahora. Estoy ejecutando PHP 5.2.14 con Zend Debugging en la última versión de Eclipse en mi computadora con Windows XP. Tengo 1 GB de RAM. Tengo XAMPP ejecutándose con Apache, MySQL y FileZilla instalados.

En XAMPP, hice lo siguiente (Apache estaba apagado durante estos cambios): hice clic en Administrador desde el Panel de control de XAMPP y fui a https:// localhost/xampp/. A partir de ahí, acepté los certificados de esta línea en la página de bienvenida:

Para soporte de OpenSSL, utilice el certificado de prueba con https: // 127.0.0.1 o https: // localhost.

En esa misma sección revisé phpinfo(). En "Medio ambiente", SERVER["HTTPS"]es on. Bajo 'Apache Environment', HTTPSes On. En 'Variables PHP, _SERVER["HTTPS"]es On. En 'Phar', OpenSSL supportes disabled(instalar ext / openssl). No sé cómo habilitar el Phar.

Ahora con respecto a los archivos en sí mismos en C: \ xampp, fui a la carpeta PHP. Bajo los dos archivos php.ini de producción y desarrollo (mejor prevenir que curar), tengo allow_url_fopen=On, allow_url_include=Ony me quita el punto y coma, por lo que extension=php_openssl.dllya no esté comentada. Incluso confirmó que el .dll está en la carpeta ext de la carpeta PHP. Tanto libeay32.dll como ssleay32.dll están en las carpetas PHP y Apache. La carpeta Apache no contiene archivos php.ini productivos o de desarrollo.

Fui a http://www.slproweb.com/products/Win32OpenSSL.html e instalé Win32 OpenSSL v1.0.0d para una medida segura.

Ahora la línea de código en cuestión en mi retrieve_website.php se ve así:

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

Tengo otros dos sitios web que consulto, pero se sirven a través de HTTP y funcionan bien. También tengo esta línea de código ingresada cerca del final del 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);

Cuando lo ejecuto como un script PHP en Eclipse, todo sale perfectamente bien como quiero junto con estos 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"
}

A pesar de todos estos cambios que hice (después de iniciar Apache), sigo teniendo los mismos errores la primera vez que accedo a mi script PHP en Eclipse y Firefox a través de http: //localhost/tutorial/retrieve_website.php :

Advertencia: file_get_contents () [function.file-get-contents]: No se puede encontrar el contenedor "https". ¿Olvidó habilitarlo cuando configuró PHP? en C: \ xampp \ htdocs \ tutorial \ retrieve_website.php en la línea 29

Advertencia: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= ID de API eliminada & cx = ID de búsqueda eliminada & q = The + Devil + fue + abajo + a + Georgia & alt = atom & num = 5) [function.file-get-contents]: no se pudo abrir la secuencia: No existe tal archivo o directorio en C: \ xampp \ htdocs \ tutorial \ retrieve_website.php en la línea 29

Advertencia: DOMDocument :: loadXML () [domdocument.loadxml]: cadena vacía suministrada como entrada en C: \ xampp \ htdocs \ tutorial \ retrieve_website.php en la línea 33

openssl: sin contenedor http: sí contenedor https: sin contenedores: 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] => cadena (13)" compress.zlib "[8] => cadena (14)" compress.bzip2 "[9] => cadena (4)" phar "}

¿Qué es lo que he pasado por alto o no he podido hacer? Que yo sepa, he hecho todo lo que he investigado sobre HTTPS y OpenSSL

John M
fuente

Respuestas:

183

Lo resolví en XAMPP descomentando ;extension=php_openssl.dlla /apache/bin/php.ini pesar de que phpinfo () me dijo que /php/php.iniera el archivo ini cargado.

EDITAR: Supongo que la respuesta de Ezra es la mejor solución agregando directamente la línea de extensión al archivo ini apropiado.

kjetilh
fuente
1
¿Estás seguro de que /apache/bin/php.inino puedo encontrarlo en XAMPP Portable Light 1.8.1? Sin embargo php/php.ini, existe, pero habilitar SSL aquí no ayuda :(
vine'th
1
esta respuesta crearía otro problema porque openssl ahora está deshabilitado y arrojará un error si obtengo_archivo_contiene un enlace seguro
thedjaney
55
Para mí fue xampp/php/php.ini:) gracias, PD: NO OLVIDES REINICIAR APACHE DESPUÉS DE
AHORRAR
97

Tuve que agregar extension=php_openssl.dlla mi php.iniarchivo ubicado en xampp/php/php.ini. De alguna manera no estaba allí, después de agregarlo y reiniciar Apache todo funcionaba bien.

Ezra
fuente
2
Tuve que agregar la línea, ya que no estaba en php.ini, pero luego funcionó, ¡gracias!
Q Studio
33

simplemente agregue dos líneas en su archivo php.ini.

extension=php_openssl.dll
allow_url_include = On

Me está funcionando.

Roopchand
fuente
77
Estoy usando wamp y necesitas editar el php.ini en la carpeta apache en lugar del habitual en la carpeta PHP: O
Al_
Gracias, fue lo allow_url_include = Onque me resolvió.
Kiee
No habilite allow_url_include: esto hace que su servidor sea vulnerable.
Pascal9x
18

Su Apache probablemente no está compilado con soporte SSL. Use cURL en lugar de file_get_contents de todos modos. Pruebe este código, si falla, tengo razón.

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;
}
Dejan Marjanović
fuente
1
ran que la función de rizo que me diste y ha sustituido $xmlresults = file_get_contents($urlquery);con $xmlresults = curl($urlquery);. PHP Script lo ejecutó bien con los mismos resultados que file_get_contents (). Ejecutándolo como página web PHP a través de localhost / tutorial / retrieve_website.php y obtengo este error:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
John M
1
El problema es probaby en el soporte SSL, ejecute phpinfo () y verifique si hay los siguientes comandos / indicadores: '--with-openssl=/usr' '--with-openssl-dir=/usr'básicamente necesita compilar Apache con soporte SSL, también debe habilitar cURL que es un par de veces más rápido que FGC y tiene numerosas opciones. No tengo idea de cómo hacer esto en Windows, lo siento.
Dejan Marjanović
1
Lo único parecido a eso es Configurar Comando en la parte superior de phpinfo () y eso no tiene nada que contenga --with-openssl relacionado. contiene otro ... con cosas. pequeña actualización: en localhost, estado verificado y dice que HTTPS (SSL) está activado.
John M
1
Si invoca return curl_exec($curl);, ¿eso no impediría que se curl_close($curl);ejecutara en la siguiente línea?
Jason Plank
12

He habilitado la extensión openssl y me funciona :)

; extension = php_openssl.dll

a

extension = php_openssl.dll

Saran Pal
fuente
6

En mi caso, el problema se debió a que WAMP usaba un php.ini diferente para CLI que Apache, por lo que la configuración realizada a través del menú WAMP no se aplica a CLI. Simplemente modifique la CLI php.ini y funciona.

dtbarne
fuente
1
Bien, ¿cómo lo hiciste? ¿Dónde puedo encontrar la CLI php.ini?
botenvouwer
1
La mía se encuentra aquí:C:\path\to\wamp\bin\php\php5.3.10\php.ini
dtbarne
2
gracias por su respuesta, pensé que allí había múltiples archivos php.ini. Cuando busqué, solo encontré uno y descomenté:; extension = php_openssl.dll Pero utilizo xammp, lo confundí con wamp. Ahora funciona, ¡sí!
botenvouwer
6

en OpenSuse 12.1 lo único que se requería era:

zypper in php5-openssl
TheSatinKnight
fuente
1
¿puedes explicar por favor?
Jason W
1
Quiero decir que recibí el mensaje de error "No se puede encontrar el contenedor" https ". ¿Olvidó habilitarlo cuando configuró PHP?" y lo resolvió ingresando "zypper en php5-openssl" en la línea de comando. Eso solucionó el error.
TheSatinKnight
5

Para mí tuve que descomentar estas líneas en php.ini:

extension=php_openssl.dll
extension_dir = "ext"

"ext" es aplicable si php_openssl.dll se encuentra en la carpeta "ext".

Nota: Tuve que hacer esto para dos de mis archivos php.ini, de lo contrario no funcionaría. Uno ubicado en la carpeta de instalación vs.php, y el otro en la carpeta PHP

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

Fuente

zeta
fuente
5

En MAC AMPPS, actualicé el php-5.5.ini con lo siguiente y ahora funciona.

allow_url_include = On
extension=openssl.so
Elye
fuente
5

En mi caso (PHP 7.3 en Windows en modo FastCGI) fue sin comentarios extension=openssl. Not extension = php_ openssl , ya que la mayoría de las personas publican aquí.

(Lo mismo se publicó aquí , pero sin detalles sobre el sistema operativo, que puede ser una diferencia clave aquí).

1234ru
fuente
4

PHP7, en el archivo php.ini, elimine el ";" antes deextension=openssl

Shusen Yi
fuente
4

Problema con file_get_contents para las solicitudes https en Windows , descomente las siguientes líneas en el archivo php.ini:

extension=php_openssl.dll
extension_dir = "ext"
Sandra
fuente
4

En su lugar, puede usar esta función si curl está instalado en su sistema:

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;  
}
actores315
fuente
2

Después de husmear todo el día, descubrí la respuesta gracias a esta guía: http://piwigo.org/forum/viewtopic.php?id=15727

Básicamente, en Eclipse -> Windows -> Preferencias -> Ejecutables PHP, hay una sección sobre dónde se hace referencia al .exe y .ini. Los valores predeterminados estaban en el directorio de Eclipse cuando instala la característica SDK de herramientas de desarrollo de PHP desde Eclipses Instalar nuevo software en el menú Ayuda.

Entonces, en lugar de eso, agregué un nuevo ejecutable llamado PHP 5.3.5 (CGI) y hice referencia a cgi.exe y .ini desde la carpeta php de xampp.

Gracias webarto por darme tu tiempo para ayudarme.

John M
fuente
2

Estoy usando opsenSUSE Leap, y tuve el mismo problema: significa que no hay soporte para OpenSSL. Así es como lo resolví:

  1. Abre YaST.
  2. Vaya a Gestión de software.
  3. En el cuadro de búsqueda en el panel izquierdo, ingrese 'php5-openssl' y presione la tecla de retorno.
  4. Haga clic en la casilla de verificación junto a 'php5-openssl' en el panel derecho para seleccionarlo y haga clic en 'Aceptar' (esto agrega soporte para OpenSSL).
  5. Reiniciar Apache: sudo service apache2 restart

Eso es todo, ya terminaste.

mtchuente
fuente
1

También recibí este error. Me di cuenta de que mi versión de PHP no tenía OpenSL compilado, así que simplemente agregar la directiva de extensión a php.ini no fue suficiente. No sé cómo tiene que resolver esto en su caso particular, pero para mí, uso macports, y el comando fue simplemente:

sudo port install php5-openssl
masón
fuente
1

Para aquellos que usan Winginx (basado en nginx en lugar de basado en Apache), lo arreglé con estos 4 pasos:

  1. En el menú Herramientas , presione la configuración Winginx PHP5 (no importa el 5 en el nombre ...):

    Winginx PHP5 Config

  2. Seleccione la versión de PHP que desea que cambie php.ini :

    Selección de versión de PHP

  3. En la pestaña Extensiones PHP, seleccione la extensión php_openssl y presione el botón Guardar :

    selección php_openssl

  4. reinicie el servicio PHP apropiado a través de la barra de tareas ( Detener e iniciar ):

    Reiniciar el servicio PHP

CPHPython
fuente
1

Prueba esto:

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

pimentón
fuente
2
¿Cómo es esto diferente de esta respuesta que ya está en esta pregunta ?
HPierce
@HPierce tiene 2 líneas que causarán un error de sintaxis debido al operador de exponenciación al principio y al final de esas líneas ... Marcado para eliminación.
CPHPython
@CPHPython Creo que intentaron usar el estilo en negrita dentro de un bloque de código
Nick
1
@CPHPython, puede usar código en negrita, pero debe usar una sintaxis diferente ... Si hace un <code> <pre> código normal ... código en negrita con * 's </pre> </code> lo obtiene :-). Aparentemente no sabía eso en 2016 o podría haber editado esto. De todos modos, estoy feliz de verlo eliminado.
HPierce
1
@ Nick, ¡puedes poner un código en negrita! No creo que esté documentado en ningún lado. Lo he hecho aquí como ejemplo, pero creo que esto aún se eliminará.
HPierce
0

Si está utilizando el servidor wamp, vaya al icono, haga clic en este icono del servidor wamp haga clic en este

Luego vaya a PHP y luego haga clic en la extensión PHP, habría que php_openssl necesitaría activar desde allí y reiniciar el servidor wamp php_openssl activo desde aquí

ML680
fuente
-1

Dentro de simple_html_dom.php cambia el valor de la $offsetvariable de -1a 0. este error generalmente ocurre cuando migras a PHP 7.

HtmlDomParser::file_get_htmlutiliza un desplazamiento predeterminado de -1, pasar 0debería solucionar su problema.

Cerebro Tgold
fuente