Problem tkwi w pytaniu. Dokładnie zbadałem rozwiązania w tym zakresie i wiem, że są na to tematy, śledziłem je i nic nie działało. Biorąc to pod uwagę, wymienię dokładnie wszystko, co zrobiłem do tej pory. Używam PHP 5.2.14 z debugowaniem Zend na najnowszej wersji Eclipse na moim komputerze z systemem Windows XP. Mam 1 GB pamięci RAM. Mam XAMPP działający z zainstalowanymi Apache, MySQL i FileZilla.
Na XAMPP wykonałem następujące czynności (Apache był wyłączony podczas tych zmian): Kliknąłem Admin z Panelu sterowania XAMPP i przeszedłem do https:// localhost/xampp/
. Stamtąd zaakceptowałem certyfikaty z tej linii na stronie powitalnej:
Aby uzyskać obsługę OpenSSL, użyj certyfikatu testowego z https: // 127.0.0.1 lub https: // localhost.
W tej samej sekcji sprawdziłem phpinfo()
. W sekcji „Środowisko” SERVER["HTTPS"]
jest on
. W sekcji „Środowisko Apache” HTTPS
jest On
. W sekcji „Zmienne PHP, _SERVER["HTTPS"]
jest On
. W sekcji „Phar” OpenSSL support
znajduje się disabled
(install ext / openssl). Nie wiem, jak włączyć Phar.
Jeśli chodzi o same pliki w C: \ xampp, przeszedłem do folderu PHP. W obydwu plików php.ini produkcji i rozwoju (lepiej dmuchać na zimne), mam allow_url_fopen=On
, allow_url_include=On
i usunąłem średnik, tak że extension=php_openssl.dll
nie jest już komentarzem. Potwierdziłem nawet, że plik .dll znajduje się w folderze ext folderu PHP. Zarówno libeay32.dll, jak i ssleay32.dll znajdują się w folderach PHP i Apache. Folder Apache nie zawiera produktywnych ani programistycznych plików php.ini.
Poszedłem na http://www.slproweb.com/products/Win32OpenSSL.html i zainstalowałem Win32 OpenSSL v1.0.0d dla bezpiecznego pomiaru.
Teraz wiersz kodu w moim retrieve_website.php wygląda następująco:
$urlquery = "https://www.googleapis.com/customsearch/v1?key=".$appid."&cx=".$google_searchid."&q=".$query."&alt=atom&num=".$results;
$xmlresults = file_get_contents($urlquery);
Mam dwie inne witryny internetowe, do których odpytuję, ale są one obsługiwane przez HTTP i działają dobrze. Mam też tę linię kodu wpisaną pod koniec skryptu:
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);
Kiedy uruchamiam go jako skrypt PHP na Eclipse, wszystko działa idealnie tak, jak chcę, wraz z następującymi wynikami:
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"
}
Pomimo tych wszystkich zmian, które wprowadziłem (po uruchomieniu Apache), nadal pojawiają się te same błędy, gdy po raz pierwszy uzyskuję dostęp do mojego skryptu PHP w Eclipse i Firefox przez http: //localhost/tutorial/retrieve_website.php :
Ostrzeżenie: file_get_contents () [function.file-get-content]: Nie można znaleźć opakowania „https” - czy zapomniałeś go włączyć podczas konfigurowania PHP? w C: \ xampp \ htdocs \ tutorial \ retrieve_website.php on line 29
Ostrzeżenie: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= usunięty identyfikator API & cx = usunięty identyfikator wyszukiwania & q = The + Devil + poszedł + w dół + do + Georgia & alt = atom & num = 5) [function.file-get-content]: nie udało się otworzyć strumienia: Brak takiego pliku lub katalogu w C: \ xampp \ htdocs \ tutorial \ retrieve_website.php w linii 29
Ostrzeżenie: DOMDocument :: loadXML () [domdocument.loadxml]: pusty ciąg znaków dostarczony jako dane wejściowe w C: \ xampp \ htdocs \ tutorial \ retrieve_website.php w linii 33
openssl: nie opakowanie http: tak opakowanie https: brak opakowania: tablica (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 "}
Co takiego przeoczyłem lub czego nie zrobiłem? O ile wiem, zrobiłem wszystko, co badałem, dotyczące HTTPS i OpenSSL
/apache/bin/php.ini
, że nie mogę go znaleźć w XAMPP Portable Light 1.8.1? Jednakphp/php.ini
istnieje, ale włączenie SSL tutaj nie pomaga :(