Impossibile trovare il wrapper "https" - hai dimenticato di abilitarlo quando hai configurato PHP?


144

Il problema è nella domanda. Ho fatto un'indagine approfondita per trovare soluzioni in merito e so che ci sono argomenti a riguardo e li ho seguiti e nulla ha funzionato. Detto questo, elencherò esattamente tutto ciò che ho fatto finora. Sto eseguendo PHP 5.2.14 con Zend Debugging sull'ultima versione di Eclipse sul mio computer Windows XP. Ho 1 GB di RAM. Ho XAMPP in esecuzione con Apache, MySQL e FileZilla installati.

Su XAMPP ho fatto quanto segue (Apache era spento durante queste modifiche): ho fatto clic su Amministratore dal pannello di controllo di XAMPP e sono andato su https:// localhost/xampp/. Da lì ho accettato i certificati da questa riga nella pagina di benvenuto:

Per il supporto OpenSSL, utilizzare il certificato di prova con https: // 127.0.0.1 o https: // localhost.

In quella stessa sezione ho controllato phpinfo(). Sotto "Ambiente", SERVER["HTTPS"]è on. Sotto "Ambiente Apache", HTTPSè On. Sotto "Variabili PHP, _SERVER["HTTPS"]è On. Sotto "Phar", OpenSSL supportè disabled(installa ext / openssl). Non so come abilitare quello Phar.

Ora per quanto riguarda i file stessi in C: \ xampp, sono andato alla cartella PHP. In entrambi i file php.ini di produzione e sviluppo (meglio prevenire che curare), ho allow_url_fopen=On, allow_url_include=One ho rimosso il punto e virgola, in modo tale che extension=php_openssl.dllnon è più commentata. Ho anche confermato che il .dll si trova nella cartella ext della cartella PHP. Sia libeay32.dll che ssleay32.dll si trovano nelle cartelle PHP e Apache. La cartella Apache non contiene file php.ini produttivi o di sviluppo.

Sono andato su http://www.slproweb.com/products/Win32OpenSSL.html e ho installato Win32 OpenSSL v1.0.0d per sicurezza.

Ora la riga di codice in questione nel mio retrieve_website.php assomiglia a questo:

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

Ho altri due siti Web che richiedo ma sono serviti tramite HTTP e funzionano bene. Ho anche inserito questa riga di codice vicino alla fine dello 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 lo eseguo come uno script PHP su Eclipse, tutto viene riprodotto perfettamente come voglio insieme a questi risultati:

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

Nonostante tutte queste modifiche che ho apportato (dopo aver avviato Apache), ottengo sempre gli stessi errori la prima volta che accedo al mio script PHP in Eclipse e Firefox tramite http: //localhost/tutorial/retrieve_website.php :

Attenzione: file_get_contents () [function.file-get-contents]: Impossibile trovare il wrapper "https" - hai dimenticato di abilitarlo quando hai configurato PHP? in C: \ xampp \ htdocs \ tutorial \ retrieve_website.php sulla linea 29

Avvertenza: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= ID API rimosso & cx = ID ricerca rimosso & q = The + Devil + andato + giù + a + Georgia & alt = atom & num = 5) [function.file-get-contents]: impossibile aprire il flusso: nessun file o directory in C: \ xampp \ htdocs \ tutorial \ retrieve_website.php sulla linea 29

Avvertenza: DOMDocument :: loadXML () [domdocument.loadxml]: stringa vuota fornita come input in C: \ xampp \ htdocs \ tutorial \ retrieve_website.php sulla linea 33

openssl: no http wrapper: sì https wrapper: no wrapper: 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 "}

Che cosa ho trascurato o fallito? Per quanto ne so, ho fatto tutto ciò che ho cercato su HTTPS e OpenSSL

Risposte:


183

L'ho risolto in XAMPP decommentando ;extension=php_openssl.dllin /apache/bin/php.ini nonostante phpinfo () mi dicesse che /php/php.iniera il file ini caricato.

EDIT: immagino che la risposta di Ezra sia la migliore soluzione aggiungendo direttamente la linea di estensione al file ini appropriato.


1
Sei sicuro che /apache/bin/php.ininon lo trovo in XAMPP Portable Light 1.8.1? Tuttavia php/php.iniesiste, ma abilitare ssl qui non aiuta :(
vigilia

1
questa risposta creerebbe quindi un altro problema perché openssl ora è disabilitato e genererà un errore se get_file_contents un collegamento protetto
janeyy

5
Per me è stato xampp/php/php.ini:) grazie, PS: NON DIMENTICARE DI RIAVVIARE L'APACHE DOPO IL SALVATAGGIO
DEI

97

Ho dovuto aggiungere extension=php_openssl.dllal mio php.inifile che si trova in xampp/php/php.ini. In qualche modo non c'era, dopo averlo aggiunto e riavviato Apache tutto funzionava bene.


2
Ho dovuto aggiungere la linea, dato che non era in php.ini - ma poi ha fatto il trucco - grazie!
Q Studio

33

aggiungi due righe nel tuo file php.ini.

extension=php_openssl.dll
allow_url_include = On

funziona per me.


7
Sto usando wamp e devi modificare php.ini nella cartella apache piuttosto il solito nella cartella PHP: O
Al_

Grazie, è stato quello allow_url_include = Onche l'ha risolto per me.
Kiee,

Non abilitare allow_url_include - questo rende il tuo server vulnerabile.
Pascal9x

18

Probabilmente Apache non è compilato con il supporto SSL. Usa comunque cURL invece di file_get_contents. Prova questo codice, se fallisce, allora ho ragione.

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
Ran che la funzione ricciolo mi hai dato e sostituito $xmlresults = file_get_contents($urlquery);con $xmlresults = curl($urlquery);. PHP Script ha funzionato bene con gli stessi risultati di file_get_contents (). Eseguendolo come pagina Web PHP tramite localhost / tutorial / retrieve_website.php e ottengo questo errore:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
John M

1
Il problema riguarda probaby nel supporto SSL, esegui phpinfo () e controlla se ci sono i seguenti comandi / flag :, '--with-openssl=/usr' '--with-openssl-dir=/usr'fondamentalmente devi compilare Apache con supporto SSL, dovresti anche abilitare cURL che è un paio di volte più veloce di FGC e ha numerose opzioni. Non ho idea di come farlo su Windows, mi dispiace.
Dejan Marjanović,

1
l'unica cosa vicina è Configure Command nella parte superiore di phpinfo () e che non ha nulla che contenga --with-openssl. contiene altro - con le cose. piccolo aggiornamento: su localhost, stato verificato e dice che HTTPS (SSL) è attivato.
John M,

1
Se invochi return curl_exec($curl);, ciò non impedirebbe curl_close($curl);l'esecuzione nella riga successiva?
Jason Plank,

12

Ho abilitato l'estensione openssl e funziona per me :)

; Extension = php_openssl.dll

per

extension = php_openssl.dll


6

Nel mio caso, il problema era dovuto al fatto che WAMP utilizzava un php.ini diverso per la CLI rispetto ad Apache, quindi le impostazioni effettuate tramite il menu WAMP non si applicano alla CLI. Basta modificare la CLI php.ini e funziona.


1
Wel come hai fatto dove posso trovare la CLI php.ini
botenvouwer

1
Il mio si trova qui:C:\path\to\wamp\bin\php\php5.3.10\php.ini
dtbarne,

2
grazie per la risposta, ho pensato lì dove più file php.ini. Quando ho cercato ho trovato solo uno e ho commentato:; extension = php_openssl.dll Ma io uso xammp l'ho confuso con wamp. Ora funziona, sì!
botenvouwer,

6

in OpenSuse 12.1 l'unica cosa richiesta era:

zypper in php5-openssl

1
puoi spiegare per favore ??
Jason W,

1
Voglio dire, ho ricevuto il messaggio di errore "Impossibile trovare il wrapper" https "- hai dimenticato di abilitarlo quando hai configurato PHP?" e risolto inserendo "zypper in php5-openssl" dalla riga di comando. Ciò ha risolto l'errore.
TheSatinKnight

5

Per me ho dovuto decommentare queste righe in php.ini:

extension=php_openssl.dll
extension_dir = "ext"

"ext" è applicabile se php_openssl.dll si trova nella cartella "ext".

Nota: ho dovuto farlo per due dei miei file php.ini, altrimenti non avrebbe funzionato. Uno si trova nella cartella di installazione vs.php e l'altro nella cartella PHP

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

fonte


5

Su MAC AMPPS, ho aggiornato php-5.5.ini con il seguente e ora funziona.

allow_url_include = On
extension=openssl.so

5

Nel mio caso (PHP 7.3 su Windows in modalità FastCGI) era senza commenti extension=openssl. Non extension = php_ openssl , come la maggior parte delle persone pubblica qui.

(La stessa cosa è stata pubblicata qui , ma senza dettagli sul sistema operativo che potrebbe essere una differenza fondamentale qui.)


4

PHP7, nel file php.ini, rimuovi ";" primaextension=openssl


4

Problema con file_get_contents per le richieste https in Windows , decommenta le seguenti righe nel file php.ini:

extension=php_openssl.dll
extension_dir = "ext"

4

Puoi usare questa funzione invece se curl è installato sul tuo 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;  
}

2

Dopo aver ficcato il naso tutto il giorno, ho capito la risposta grazie a questa guida: http://piwigo.org/forum/viewtopic.php?id=15727

Fondamentalmente in Eclipse -> Windows -> Preferenze -> File eseguibili PHP, c'è una sezione in cui si fa riferimento a .exe e .ini. Quelli predefiniti si trovavano nella directory Eclipse quando si installa la funzione SDK degli strumenti di sviluppo PHP da Eclipses Installa nuovo software nel menu Guida.

Quindi, invece, ho aggiunto un nuovo eseguibile chiamato PHP 5.3.5 (CGI) e ho fatto riferimento a cgi.exe e .ini dalla cartella php di xampp.

Grazie webarto per aver dato il tuo tempo per aiutarmi.


2

Sto usando opsenSUSE Leap e ho avuto lo stesso problema - significa che non c'è supporto per OpenSSL. Ecco come l'ho risolto:

  1. Apri YaST.
  2. Vai a Gestione software.
  3. Nella casella di ricerca nel riquadro di sinistra, immettere "php5-openssl" e premere il tasto Invio.
  4. Fare clic sulla casella di controllo accanto a "php5-openssl" nel riquadro destro per selezionarlo, quindi fare clic su "Accetta" (questo aggiunge il supporto OpenSSL).
  5. Riavvia Apache: sudo service apache2 restart

Ecco fatto, il gioco è fatto.


1

Ho anche questo errore. Ho capito che la mia versione di PHP non aveva compilato openssl, quindi semplicemente aggiungere la direttiva extension a php.ini non era abbastanza. Non so come risolverlo nel tuo caso particolare, ma per me uso macports e il comando era solo:

sudo port install php5-openssl

1

Per quelli che usano Winginx (basato su nginx invece che su Apache), l'ho risolto con questi 4 passaggi:

  1. Dal menu Strumenti, seleziona la configurazione di Winginx PHP5 (non importa il 5 nel nome ...):

    Winginx PHP5 Config

  2. Seleziona la versione di PHP che vuoi che php.ini cambi:

    Selezione della versione di PHP

  3. Nella scheda Estensioni PHP seleziona l' estensione php_openssl e premi il pulsante Salva :

    selezione php_openssl

  4. riavviare il servizio PHP appropriato tramite la barra delle applicazioni ( Stop and Start ):

    Riavvia il servizio PHP


1

Prova questo:

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
In che modo è diverso da questa risposta che è già su questa domanda ?
HPierce,

@HPierce ha 2 righe che causeranno un errore di sintassi dovuto all'operatore esponenziale all'inizio e alla fine di quelle righe ... Contrassegnato per l'eliminazione.
CPHPython

@CPHPython Penso che abbiano provato a usare lo stile grassetto all'interno di un blocco di codice
Nick,

1
@CPHPython, puoi mettere in grassetto il codice, ma devi usare una sintassi diversa ... Se fai un <code> <pre> codice normale ... un codice in grassetto con * '</pre> </code> lo ottieni :-). Apparentemente non lo sapevo nel 2016 o avrei potuto modificarlo. Indipendentemente da ciò, sono felice di vederlo eliminato.
HPierce,

1
@Nick, puoi scrivere in grassetto! Non credo che sia documentato da nessuna parte. L'ho fatto qui come esempio, ma penso che questo sarà ancora cancellato.
HPierce,

0

Se stai usando il server Wamp, vai sull'icona fai clic su questo icona del server wamp fare clic su questo

Quindi vai su PHP quindi fai clic sull'estensione PHP ci sarebbe php_openssl da attivare da lì e riavvia il server Wamp php_openssl attivo da qui


-1

All'interno di simple_html_dom.php cambia il valore della $offsetvariabile da -1a 0. questo errore si verifica in genere quando si esegue la migrazione a PHP 7.

HtmlDomParser::file_get_htmlutilizza un offset predefinito di -1, passando in 0dovrebbe risolvere il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.