Der Wrapper "https" konnte nicht gefunden werden. Haben Sie vergessen, ihn zu aktivieren, als Sie PHP konfiguriert haben?

143

Das Problem liegt in der Frage. Ich habe eine gründliche Untersuchung durchgeführt, um diesbezügliche Lösungen zu finden, und ich weiß, dass es Themen dazu gibt, und ich habe sie auch verfolgt, und nichts hat funktioniert. Davon abgesehen werde ich genau alles auflisten, was ich bisher getan habe. Ich verwende PHP 5.2.14 mit Zend Debugging auf der neuesten Eclipse-Version auf meinem Windows XP-Computer. Ich habe 1 GB RAM. Ich habe XAMPP mit Apache, MySQL und FileZilla installiert.

Auf XAMPP habe ich Folgendes getan (Apache war während dieser Änderungen deaktiviert): Klicken Sie in der XAMPP-Systemsteuerung auf Admin und gehen Sie zu https:// localhost/xampp/. Von dort habe ich die Zertifikate aus dieser Zeile auf der Begrüßungsseite angenommen:

Für die OpenSSL-Unterstützung verwenden Sie bitte das Testzertifikat mit https: // 127.0.0.1 oder https: // localhost.

Im selben Abschnitt habe ich nachgesehen phpinfo(). Unter 'Umwelt' SERVER["HTTPS"]ist on. Klicken Sie unter "Apache-Umgebung" aufHTTPS ist On. Unter ‚PHP - Variablen, _SERVER["HTTPS"]ist On. Unter 'Phar' OpenSSL supportsteht disabled(installiere ext / openssl). Ich weiß nicht, wie ich den Phar aktivieren soll.

In Bezug auf die Dateien selbst in C: \ xampp ging ich zum PHP-Ordner. Unter der Produktion und Entwicklung php.ini - Dateien (sicher ist sicher), habe ich allow_url_fopen=On, allow_url_include=Onund ich das Semikolon entfernt, so dass extension=php_openssl.dllnicht mehr kommentiert werden. Ich habe sogar bestätigt, dass sich die DLL im ext-Ordner des PHP-Ordners befindet. Sowohl libeay32.dll als auch ssleay32.dll befinden sich in den Ordnern PHP und Apache. Der Apache-Ordner enthält weder produktive noch entwicklungsbezogene php.ini-Dateien.

Ich habe http://www.slproweb.com/products/Win32OpenSSL.html aufgerufen und Win32 OpenSSL v1.0.0d installiert, um eine sichere Maßnahme zu gewährleisten.

Nun sieht die fragliche Codezeile in meiner retrieve_website.php folgendermaßen aus:

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

Ich habe zwei andere Websites, die ich abfrage, aber sie werden über HTTP bereitgestellt und funktionieren einwandfrei. Ich habe auch diese Codezeile gegen Ende des Skripts eingegeben:

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

Wenn ich es als PHP-Skript unter Eclipse ausführe, wird alles einwandfrei ausgegeben, so wie ich es möchte, zusammen mit den folgenden Ergebnissen:

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

Trotz all dieser Änderungen, die ich vorgenommen habe (nachdem ich Apache gestartet habe), werden beim ersten Zugriff auf mein PHP-Skript in Eclipse und Firefox über http: //localhost/tutorial/retrieve_website.php immer noch dieselben Fehler angezeigt : .

Warnung: file_get_contents () [function.file-get-content]: Der Wrapper "https" konnte nicht gefunden werden. Haben Sie vergessen, ihn zu aktivieren, als Sie PHP konfiguriert haben? in C: \ xampp \ htdocs \ tutorial \ retrieve_website.php in Zeile 29

Warnung: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= entfernte API-ID & cx = entfernte Such-ID & q = The + Devil + ging + runter + nach + Georgia & alt = atom & num = 5) [function.file-get-content]: Stream konnte nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis in C: \ xampp \ htdocs \ tutorial \ retrieve_website.php in Zeile 29 Warnung: DOMDocument :: loadXML () [domdocument.loadxml]: Leere Zeichenfolge, die als Eingabe in C: \ xampp \ htdocs \ tutorial \ retrieve_website.php in Zeile 33 angegeben wird openssl: kein http-Wrapper: ja https wrapper: nein 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"}



Was habe ich übersehen oder versäumt? Nach meinem eigenen Wissen habe ich alles getan, was ich über HTTPS und OpenSSL recherchiert habe

John M.
quelle

Antworten:

183

Ich löste es in XAMPP von uncommenting ;extension=php_openssl.dllin /apache/bin/php.ini trotz phpinfo () mir zu sagen , /php/php.iniwar die geladene INI - Datei.

EDIT: Ich denke, Ezra Antwort ist die beste Lösung, um die Erweiterungszeile direkt zur entsprechenden INI-Datei hinzuzufügen.

kjetilh
quelle
1
Sind Sie sicher, dass /apache/bin/php.iniich es in XAMPP Portable Light 1.8.1 nicht finden kann? Es php/php.iniexistiert jedoch, aber das Aktivieren von ssl hier hilft nicht :(
Vine'th
1
Diese Antwort würde dann ein weiteres Problem verursachen, da openssl jetzt deaktiviert ist und einen Fehler auslöst, wenn ich_file_contents einen gesicherten Link
erhalte
5
Für mich war es xampp/php/php.ini:) Danke, PS: VERGESSEN SIE NICHT, APACHE NACH DEM SPEICHERN
VON
97

Ich musste extension=php_openssl.dllmeiner php.iniDatei in hinzufügen xampp/php/php.ini. Irgendwie war es nicht da, nach dem Hinzufügen und Neustarten von Apache funktionierte alles einwandfrei.

Esra
quelle
2
Ich musste die Zeile hinzufügen, da sie nicht in php.ini war - aber dann hat ich den Trick gemacht - danke!
Q Studio
33

Fügen Sie einfach zwei Zeilen in Ihre php.ini-Datei ein.

extension=php_openssl.dll
allow_url_include = On

Es funktioniert für mich.

Roopchand
quelle
7
Ich benutze wamp und Sie müssen die php.ini im Apache-Ordner bearbeiten, anstatt die übliche im PHP-Ordner: O
Al_
Danke, es war das allow_url_include = On, was es für mich gelöst hat.
Kiee
Aktivieren Sie allow_url_include nicht - dies macht Ihren Server anfällig.
Pascal9x
18

Ihr Apache ist wahrscheinlich nicht mit SSL-Unterstützung kompiliert. Verwenden Sie trotzdem cURL anstelle von file_get_contents. Versuchen Sie diesen Code, wenn er fehlschlägt, habe ich recht.

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ć
quelle
1
RAN , dass curl Funktion , die Sie mir gegeben haben und ersetzt $xmlresults = file_get_contents($urlquery);mit $xmlresults = curl($urlquery);. PHP Script lief einwandfrei mit den gleichen Ergebnissen wie file_get_contents (). Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
John M
1
Das Problem ist wahrscheinlich bei der SSL-Unterstützung, führen Sie phpinfo () aus und prüfen Sie, ob folgende Befehle / Flags vorhanden sind: '--with-openssl=/usr' '--with-openssl-dir=/usr'Grundsätzlich müssen Sie Apache mit SSL-Unterstützung kompilieren. Außerdem sollten Sie cURL aktivieren, das einige Male schneller als FGC ist und zahlreiche Optionen bietet. Ich habe keine Ahnung, wie das unter Windows geht, sorry.
Dejan Marjanović
1
Das einzige, was dem nahe kommt, ist Configure Command oben in phpinfo (), und das enthält nichts, was --with-openssl betrifft. es enthält andere - mit Dingen. kleines Update: Auf localhost wird der Status überprüft und es wird angezeigt, dass HTTPS (SSL) aktiviert ist.
John M
1
Wenn Sie aufrufen return curl_exec($curl);, würde dies nicht die curl_close($curl);Ausführung in der nächsten Zeile verhindern ?
Jason Plank
12

Ich habe die openssl-Erweiterung aktiviert und es funktioniert für mich :)

; extension = php_openssl.dll

zu

extension = php_openssl.dll

Saran Pal
quelle
6

In meinem Fall war das Problem darauf zurückzuführen, dass WAMP eine andere php.ini für CLI als Apache verwendete, sodass Ihre über das WAMP-Menü vorgenommenen Einstellungen nicht für CLI gelten. Ändern Sie einfach die CLI php.ini und es funktioniert.

dtbarne
quelle
1
Wel wie hast du es gemacht wo finde ich die CLI php.ini
botenvouwer
1
Meins befindet sich hier:C:\path\to\wamp\bin\php\php5.3.10\php.ini
dtbarne
2
danke für deine antwort, ich dachte da wo mehrere php.ini dateien sind. Als ich gesucht habe, habe ich nur einen gefunden und nicht kommentiert :; extension = php_openssl.dll Aber ich benutze xammp, ich habe es mit wamp verwechselt. Jetzt funktioniert es, ja!
Botenvouwer
6

In OpenSuse 12.1 war nur Folgendes erforderlich:

zypper in php5-openssl
TheSatinKnight
quelle
1
Kannst du bitte erklären??
Jason W
1
Ich meine, ich habe die Fehlermeldung "Der Wrapper" https "konnte nicht gefunden werden - haben Sie vergessen, ihn zu aktivieren, als Sie PHP konfiguriert haben?" und löste es durch Eingabe von "zypper in php5-openssl" in der Befehlszeile. Das hat den Fehler behoben.
TheSatinKnight
5

Für mich musste ich diese Zeilen in php.ini auskommentieren:

extension=php_openssl.dll
extension_dir = "ext"

"ext" ist anwendbar, wenn sich php_openssl.dll im Ordner "ext" befindet.

Hinweis: Ich musste dies für zwei meiner php.ini-Dateien tun, sonst würde es nicht funktionieren. Eine befindet sich im Installationsordner vs.php und die andere im PHP-Ordner

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

Quelle

Zeta
quelle
5

Auf MAC AMPPS habe ich die php-5.5.ini wie folgt aktualisiert und jetzt funktioniert es.

allow_url_include = On
extension=openssl.so
Elye
quelle
5

In meinem Fall (PHP 7.3 unter Windows im FastCGI-Modus) war es unkommentiert extension=openssl. Nicht extension = php_ openssl , da die meisten Menschen hier posten.

(Das Gleiche wurde hier veröffentlicht , jedoch ohne Details zum Betriebssystem, was hier einen wesentlichen Unterschied darstellen kann.)

1234ru
quelle
4

PHP7 entfernen Sie in der Datei php.ini das ";" Vorextension=openssl

Shusen Yi
quelle
4

Problem mit file_get_contents für die Anforderungen https in Windows , kommentieren Sie die folgenden Zeilen in der Datei php.ini aus:

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

Sie können diese Funktion stattdessen verwenden, wenn Curl auf Ihrem System installiert ist:

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;  
}
Schauspieler315
quelle
2

Nachdem ich den ganzen Tag herumgeschnüffelt hatte, fand ich die Antwort dank dieses Handbuchs heraus: http://piwigo.org/forum/viewtopic.php?id=15727

Grundsätzlich gibt es unter Eclipse -> Windows -> Einstellungen -> PHP Executables einen Abschnitt, in dem auf .exe und .ini verwiesen wird. Die Standardeinstellungen befanden sich im Eclipse-Verzeichnis, wenn Sie die SDK-Funktion der PHP-Entwicklungstools über Eclipses Install New Software im Menü Hilfe installieren.

Stattdessen habe ich eine neue ausführbare Datei namens PHP 5.3.5 (CGI) hinzugefügt und auf die Dateien cgi.exe und .ini aus dem PHP-Ordner von xampp verwiesen.

Vielen Dank an webarto, dass Sie sich die Zeit genommen haben, mir zu helfen.

John M.
quelle
2

Ich verwende opsenSUSE Leap und hatte das gleiche Problem - es bedeutet, dass OpenSSL nicht unterstützt wird. So habe ich es gelöst:

  1. Öffnen Sie YaST.
  2. Gehen Sie zu Software Management.
  3. Geben Sie im Suchfeld im linken Bereich 'php5-openssl' ein und drücken Sie die Eingabetaste.
  4. Aktivieren Sie das Kontrollkästchen neben "php5-openssl" im rechten Bereich, um es auszuwählen, und klicken Sie auf "Akzeptieren" (dies fügt OpenSSL-Unterstützung hinzu).
  5. Starten Sie Apache neu: sudo service apache2 restart

Das war's, du bist fertig.

mtchuente
quelle
1

Ich habe auch diesen Fehler bekommen. Ich fand heraus, dass in meiner PHP-Version openssl nicht kompiliert war, sodass es nicht ausreichte, die Erweiterungsanweisung einfach zu php.ini hinzuzufügen. Ich weiß nicht, wie Sie dies in Ihrem speziellen Fall lösen müssen, aber für mich verwende ich Macports, und der Befehl war nur:

sudo port install php5-openssl
Mason
quelle
1

Für diejenigen, die Winginx verwenden ( Nginx- basiert statt Apache-basiert), habe ich dies mit den folgenden 4 Schritten behoben:

  1. Auf den Extras schlug Menü Winginx PHP5 Config (nie etwas dagegen , 5 im Namen ...):

    Winginx PHP5 Konfig

  2. Wählen Sie die PHP-Version aus, die die php.ini ändern soll:

    Auswahl der PHP-Version

  3. Auf der PHP - Erweiterungen Registerkarte wählen Sie die php_openssl Erweiterung und drücken Sie die Save - Taste:

    php_openssl Auswahl

  4. Starten Sie den entsprechenden PHP-Dienst über die Taskleiste neu ( Stop and Start ):

    Starten Sie den PHP-Dienst neu

CPHPython
quelle
1

Versuche dies:

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

Paprik
quelle
2
Wie unterscheidet sich von dieser Antwort , die bereits auf diese Frage ist ?
HPierce
@HPierce hat 2 Zeilen, die aufgrund des Exponentiationsoperators am Anfang und Ende dieser Zeilen einen Syntaxfehler verursachen ... Zum Löschen markiert.
CPHPython
@CPHPython Ich denke, sie haben versucht, den kühnen Stil in einem Codeblock zu verwenden
Nick
1
@CPHPython, Sie können fett gedruckten Code verwenden, müssen jedoch eine andere Syntax verwenden ... Wenn Sie einen <code> <pre> normalen Code ausführen ... fett gedruckten Code mit * 's </ pre> </ code> erhalten Sie ihn :-). Anscheinend wusste ich das 2016 nicht oder ich hätte es vielleicht bearbeitet. Trotzdem bin ich froh, dass es gelöscht wurde.
HPierce
1
@ Nick, du kannst fett schreiben! Ich glaube nicht, dass es irgendwo dokumentiert ist. Ich habe es hier als Beispiel gemacht, aber ich denke, das wird immer noch gelöscht.
HPierce
0

Wenn Sie einen Wamp-Server verwenden, klicken Sie auf das Symbol Wamp-Server-Symbol Klicken Sie darauf

Gehen Sie dann zu PHP und klicken Sie auf die PHP-Erweiterung. Dort müsste php_openssl aktiviert und der Wamp-Server neu gestartet werden aktive php_openssl von hier

ML680
quelle
-1

Ändern Sie in der Datei simple_html_dom.php den Wert der $offsetVariablen von -1bis 0. Dieser Fehler tritt normalerweise auf, wenn Sie auf PHP 7 migrieren .

HtmlDomParser::file_get_htmlVerwendet einen Standardversatz von -1, sollte das Übergeben 0Ihr Problem beheben.

Tgold Gehirn
quelle