Imansible trovare il wrapper "https" – hai dimenticato di abilitarlo quando hai configurato PHP?

Il problema è nella domanda. Ho fatto un'indagine approfondita per le soluzioni in merito a questo e so che ci sono argomenti per questo e ho seguito anche loro 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 un 1 GB di RAM. Ho XAMPP in esecuzione con Apache, MySQL e FileZilla installati.

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

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

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

Ora riguardo ai 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=On , e ho rimosso il punto e virgola, in modo che extension=php_openssl.dll non sia più commentato. Ho anche confermato che il file .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 di sviluppo o di sviluppo.

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

Ora la row di codice in questione nel mio retrieve_website.php ha il seguente aspetto:

 $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 interrogo ma vengono serviti via HTTP e funzionano bene. Ho anche inserito questa row di codice vicino alla fine dello script:

 echo 'openssl: ', extension_loaded ('openssl') ? 'yes':'no', "\n"; echo 'http wrapper: ', in_arrays('http', $w) ? 'yes':'no', "\n"; echo 'https wrapper: ', in_arrays('https', $w) ? 'yes':'no', "\n"; echo 'wrappers: ', var_dump($w); 

Quando lo eseguo come script PHP su Eclipse, tutto risulta perfettamente perfetto come voglio con questi risultati:

 openssl: yes http wrapper: yes https wrapper: yes wrappers: arrays(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 apportte (dopo aver avviato Apache), ottengo 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]: Imansible trovare il wrapper "https" – hai dimenticato di abilitarlo quando hai configurato PHP? in C: \ xampp \ htdocs \ tutorial \ retrieve_website.php sulla row 29

Attenzione: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= ID API rimosso & cx = ID ricerca rimosso & q = Il + Devil + è andato + in basso + a + Georgia e alt = atom & num = 5) [function.file -get-contents]: imansible aprire lo stream: nessun file o directory in C: \ xampp \ htdocs \ tutorial \ retrieve_website.php sulla row 29

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

openssl: no http wrapper: yes https wrapper: no wrappers: arrays (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 non ho fatto? Per quanto ne so, ho fatto tutto ciò che ho studiato riguardo a HTTPS e OpenSSL

L'ho risolto in XAMPP decommentando ;extension=php_openssl.dll in /apache/bin/php.ini nonostante phpinfo () dicendomi che /php/php.ini era il file ini caricato.

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

Ho dovuto aggiungere extension=php_openssl.dll al mio file php.ini situato in xampp/php/php.ini . In qualche modo non c'era, dopo averlo aggiunto e riavviato Apache, tutto andava bene.

aggiungi solo due righe nel tuo file php.ini.

 extension=php_openssl.dll allow_url_include = On 

sta funzionando per me.

Probabilmente il tuo Apache non è compilato con il supporto SSL. Usa cURL invece di file_get_contents comunque. 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; } 

Ho abilitato l'estensione di openssl e funziona per me 🙂

; extension = php_openssl.dll

a

extension = php_openssl.dll

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

in OpenSuse 12.1 l'unica cosa richiesta era:

 zypper in php5-openssl 

Puoi invece utilizzare questa function.

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

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: wherevo farlo per due dei miei file php.ini altrimenti non avrebbe funzionato. Uno situato 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

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

Fondamentalmente in Eclipse -> Windows -> Preferenze -> Eseguibili PHP, c'è una sezione su cui si fa riferimento .exe e .ini. I predefiniti erano nella directory Eclipse quando si installa la function SDK degli strumenti di sviluppo PHP da Eclipse Installa nuovo software nel menu Guida.

Così, 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 per avermi dato il tuo tempo per aiutarmi.

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

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

 allow_url_include = On extension=openssl.so 

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

 sudo port install php5-openssl 

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, inserisci "php5-openssl" e premi il tasto Invio.
  4. Fare clic sulla casella accanto a "php5-openssl" nel riquadro di destra per selezionarlo e fare clic su "Accetta" (questo aggiunge il supporto per OpenSSL).
  5. Riavvia Apache: sudo service apache2 restart

Ecco, hai finito.