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 HTTPS
On
. Unter 'PHP-Variablen' ist _SERVER["HTTPS"]
On
. Unter 'Phar' ist OpenSSL support
disabled
(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
Ich löste es in XAMPP, indem ich ;extension=php_openssl.dll
in /Apache/bin/php.ini
auskommentierte, 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.
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.
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.
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;
}
Ich habe die openssl Erweiterung aktiviert und es funktioniert für mich :)
; extension = php_openssl.dll
zu
extension = php_openssl.dll
in OpenSuse 12.1 wurde nur Folgendes benötigt:
zypper in php5-openssl
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.
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
Auf MAC AMPPS habe ich die php-5.5.ini mit folgendem aktualisiert und nun funktioniert es.
allow_url_include = On
extension=openssl.so
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;
}
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"
Ich benutze opsenSUSE Leap und hatte das gleiche Problem - es bedeutet, dass OpenSSL nicht unterstützt wird. So habe ich es gelöst:
Sudo service Apache2 restart
Das ist es, du bist fertig.
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.
Für diejenigen, die Winginx (nginx statt Apache) verwenden, habe ich es mit diesen 4 Schritten behoben:
Im Menü Tools tippen Sie auf Winginx PHP5 Config (machen Sie sich nichts aus dem 5 im Namen ...):
Wählen Sie die Version PHP aus, die die php.ini ändern soll:
Wählen Sie auf der Registerkarte PHP Extensions die Erweiterung php_openssl aus und drücken Sie die Schaltfläche Save:
starten Sie den entsprechenden PHP Dienst über die Taskleiste neu (Stop und Start):
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;
}
Entfernen Sie in der php.ini-Datei das ";" vor extension=openssl
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
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.)