it-swarm.com.de

Der Wrapper konnte nicht "https" gefunden werden. Haben Sie vergessen, ihn bei der Konfiguration von PHP zu aktivieren?

Das Problem liegt in der Frage. Ich habe diesbezüglich gründlich nach Lösungen gesucht und weiß, dass es dazu Themen gibt. Ich habe sie auch verfolgt und nichts hat funktioniert. Davon abgesehen werde ich genau alles auflisten, was ich bisher gemacht habe. Ich führe PHP 5.2.14 mit Zend Debugging auf der neuesten Eclipse-Version auf meinem Windows XP - Computer aus. Ich habe 1 GB RAM. Ich habe XAMPP mit Apache, MySQL und FileZilla installiert. 

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

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

In diesem Abschnitt habe ich phpinfo() überprüft. Unter "Umgebung" ist SERVER["HTTPS"]on. Unter 'Apache-Umgebung' ist HTTPSOn. Unter 'PHP-Variablen' ist _SERVER["HTTPS"]On. Unter 'Phar' ist OpenSSL supportdisabled (install ext/openssl). Ich weiß nicht, wie ich den Phar aktivieren kann.

Nun zu den Dateien selbst unter C:\xampp ging ich zum Ordner PHP. Unter Produktions- und Entwicklungs-php.ini-Dateien (besser als Entschuldigung) habe ich allow_url_fopen=On, allow_url_include=On und das Semikolon entfernt, sodass extension=php_openssl.dll nicht mehr auskommentiert wird. 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 php.ini-Entwicklungsdateien.

Ich bin zu http://www.slproweb.com/products/Win32OpenSSL.html gegangen und habe Win32 OpenSSL v1.0.0d für eine sichere Maßnahme installiert.

Nun sieht die betreffende Codezeile in meiner retrieve_website.php so 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 am 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 auf Eclipse starte, wird alles perfekt so ausgegeben, wie ich es möchte, zusammen mit diesen 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), erhalte ich immer noch dieselben Fehler, wenn ich zum ersten Mal auf mein PHP -Skript in Eclipse und Firefox über http: // localhost/tutorial/retrieve_website zugreife .php :

Warnung: file_get_contents () [function.file-get-contents]: Der Wrapper "https" wurde nicht gefunden. Haben Sie vergessen, ihn bei der Konfiguration von PHP zu aktivieren? 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 = Der + Devil + ging + nach + Georgia + alt = atom & num = 5) [function.file-get-contents]: Stream konnte nicht geöffnet werden: Keine solche Datei oder 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 bereitgestellt wird

openssl: no http wrapper: ja https wrapper: no wrapper: array (10) {[0] => string (3) "php" [1] => string (4) "datei" [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 habe es nicht getan? Nach meinem eigenen Wissen habe ich alles getan, worüber ich bezüglich HTTPS und OpenSSL recherchiert habe

126
John M

Ich löste es in XAMPP, indem ich ;extension=php_openssl.dll in /Apache/bin/php.iniauskommentierte, obwohl phpinfo () mir mitteilt, dass /php/php.ini die geladene Ini-Datei war.

EDIT: Ich denke, Ezra answer ist die beste Lösung, wenn Sie die Erweiterungslinie direkt in die entsprechende INI-Datei einfügen.

170
kjetilh

Ich musste extension=php_openssl.dll zu meiner php.ini-Datei in xampp/php/php.ini hinzufügen. Irgendwie war es nicht da, nachdem es Apache hinzugefügt und Apache neu gestartet hatte, funktionierte alles gut.

91
Ezra

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

extension=php_openssl.dll
allow_url_include = On

es arbeitet für mich.

31
Roopchand

Ihr Apache wird 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;
}
18

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

; extension = php_openssl.dll  

zu

extension = php_openssl.dll

12
Saran Pal

in OpenSuse 12.1 wurde nur Folgendes benötigt:

zypper in php5-openssl
6
TheSatinKnight

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

6
dtbarne

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 two meiner php.ini-Dateien tun, sonst würde es nicht funktionieren. Einer befindet sich im Installationsordner von vsphp und der andere im Ordner PHP

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

Quelle

5
zeta

Auf MAC AMPPS habe ich die php-5.5.ini mit folgendem aktualisiert und nun funktioniert es.

allow_url_include = On
extension=openssl.so
5
Elye

Sie können diese Funktion stattdessen verwenden.

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

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

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

Ich benutze 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. Klicken Sie im rechten Bereich auf das Kontrollkästchen neben 'php5-openssl', um es auszuwählen, und klicken Sie auf 'Akzeptieren' (dadurch wird OpenSSL-Unterstützung hinzugefügt).
  5. Apache neu starten: Sudo service Apache2 restart

Das ist es, du bist fertig.

2
mtchuente

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

Grundsätzlich gibt es unter Eclipse -> Windows -> Preferences -> PHP Executables einen Abschnitt, in dem auf die .exe und .ini verwiesen wird. Die Standardeinstellungen befanden sich im Eclipse-Verzeichnis, wenn Sie das PHP Development Tools SDK-Feature von Eclipses Install New Software im Hilfe-Menü installieren.

Stattdessen fügte ich eine neue ausführbare Datei mit dem Namen PHP 5.3.5 (CGI) hinzu und verwies auf die Dateien cgi.exe und .ini aus dem php-Ordner von xampp.

Danke, webarto, dass Sie mir Zeit gegeben haben, mir zu helfen.

2
John M

Für diejenigen, die Winginx (nginx statt Apache) verwenden, habe ich es mit diesen 4 Schritten behoben:

  1. Im Menü Tools tippen Sie auf Winginx PHP5 Config (machen Sie sich nichts aus dem 5 im Namen ...):

     Winginx PHP5 Config

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

     PHP version selection

  3. Wählen Sie auf der Registerkarte PHP Extensions die Erweiterung php_openssl aus und drücken Sie die Schaltfläche Save:

     php_openssl selection

  4. starten Sie den entsprechenden PHP Dienst über die Taskleiste neu (Stop und Start):

     Restart PHP service

1
CPHPython

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

1
paprik

Entfernen Sie in der php.ini-Datei das ";" vor extension=openssl

1
Shusen Yi

Ich habe auch diesen Fehler erhalten. Ich habe herausgefunden, dass in meiner Version von PHP opensl nicht kompiliert wurde. Daher reicht es nicht aus, die Erweiterungsdirektive php.ini hinzuzufügen. Ich weiß nicht, wie Sie das in Ihrem speziellen Fall lösen müssen, aber für mich benutze ich macports und der Befehl war nur:

Sudo port install php5-openssl
1
mason

Wenn Sie einen Wamp-Server verwenden, klicken Sie auf dieses wamp server icon click on this

Gehen Sie dann zu PHP und klicken Sie auf die Erweiterung PHP. Dort müsste php_openssl aktiviert werden, um den Wamp-Server active php_openssl from here

0
ML680

In meinem Fall (PHP 7.3 unter Windows im FastCGI-Modus) wurde extension=openssl nicht kommentiert. Nicht extension = php _ openssl , wie die meisten Leute hier posten.

(Dasselbe war hier gepostet , aber ohne Details zum Betriebssystem, was hier ein wesentlicher Unterschied sein kann.)

0
1234ru