Bei meiner Recherche zur Hacker News API bin ich kürzlich auf ein HTTPS-Problem gestoßen. Da auf alle Hacker-News-APIs über das verschlüsselte HTTPS
-Protokoll zugegriffen wird, das sich vom gewöhnlichen HTTP-Protokoll unterscheidet, wird bei Verwendung der Funktion file_get_contents() in PHP der Zugriff auf den bereitgestellten Inhalt verwendet API Bei der Dateneingabe
ist ein Fehler aufgetreten. Der verwendete Code lautet wie folgt:
$ data = file_get_contents("https://hacker-news.firebaseio.com/v0/topstories.json?
print=pretty");
......
Beim Ausführen des obigen Codes wird die folgende Fehlermeldung angezeigt:
PHP-Warnung: file_get_contents(): Der Wrapper „https“ konnte nicht gefunden werden – haben Sie vergessen, ihn zu aktivieren?
Warum tritt dieser Fehler auf? Nach einiger Suche im Internet habe ich festgestellt, dass viele Leute auf diesen Fehler gestoßen sind. Das Problem ist sehr direkt, da in der PHP-Konfigurationsdatei nicht aktiviert ist . Aktivieren Sie einen Parameter. Auf meinem Computer befindet er sich in /apache/bin/php.ini. Der Erweiterung=php_openssl.dll muss vorangestellt werden Semikolon an der Seite. Sie können das folgende Skript verwenden, um die Konfiguration Ihrer PHP-Umgebung zu überprüfen: $w = stream_get_wrappers();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); Beim Ausführen des obigen Skriptausschnitts ist das Ergebnis auf meinem Computer: openssl: nohttp Wrapper: jahttps Wrapper: neinWrapper: 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"}Alternativen Es ist ganz einfach Fehler zu finden und zu korrigieren. Das Schwierige ist, dass man die Fehler nicht korrigieren kann, nachdem man sie gefunden hat. Ich wollte diese Skriptmethode ursprünglich auf dem Remote-Host installieren, konnte die PHP-Konfiguration des Remote-Hosts jedoch nicht ändern. Daher konnte ich diese Lösung nicht verwenden, aber wir können sie nicht auf demselben Server ausführen . Dieser Weg wird nicht funktionieren. Eine weitere Funktion, die ich häufig zum Abrufen von Inhalten in PHP verwende, ist curl. Sie ist leistungsfähiger als file_get_contents() und bietet viele Optionen
Parameter auswählen. Für das Problem des Zugriffs auf HTTPS-Inhalte müssen wir folgende CURL-Konfigurationsparameter verwenden: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);Sie können es sehen Semantisch gesehen ignoriert/überspringt es die SSL-Sicherheitsüberprüfung. Vielleicht ist dies keine gute Vorgehensweise, aber für normale Szenarien reicht das aus. Das Folgende ist eine von Curl gekapselte Funktion, die auf HTTPS-Inhalte zugreifen kann: Funktion getHTTPS($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch , CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch , CURLOPT_RETURNTRANSFER, TRUE); $result = curl_exec($ch); curl_close($ch); return $result;}