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 :(xampp/php/php.ini
:) dzięki, PS: NIE ZAPOMNIJ PONOWNIE URUCHOMIĆ APACHE PO ZAPISANIU ZMIANMusiałem dodać
extension=php_openssl.dll
do mojegophp.ini
pliku znajdującego się wxampp/php/php.ini
. Jakoś go tam nie było, po dodaniu i ponownym uruchomieniu Apache wszystko działało dobrze.źródło
po prostu dodaj dwie linie do pliku php.ini.
to działa dla mnie.
źródło
allow_url_include = On
rozwiązało to dla mnie.Twój Apache prawdopodobnie nie jest skompilowany z obsługą SSL. Mimo wszystko użyj cURL zamiast file_get_contents. Wypróbuj ten kod, jeśli się nie powiedzie, mam rację.
źródło
$xmlresults = file_get_contents($urlquery);
z$xmlresults = curl($urlquery);
. Skrypt PHP uruchomił go dobrze z tymi samymi wynikami, co file_get_contents (). Uruchamiam go jako stronę internetową PHP przez localhost / tutorial / retrieve_website.php i otrzymuję ten błąd:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
'--with-openssl=/usr' '--with-openssl-dir=/usr'
w zasadzie musisz skompilować Apache z obsługą SSL, powinieneś także włączyć cURL, który jest kilka razy szybszy niż FGC i ma wiele opcji. Nie mam pojęcia, jak to zrobić w systemie Windows, przepraszam.return curl_exec($curl);
, czy to nie przeszkodzicurl_close($curl);
w wykonaniu następnej linii?Mam włączone rozszerzenie openssl i działa dla mnie :)
; rozszerzenie = php_openssl.dll
do
rozszerzenie = php_openssl.dll
źródło
W moim przypadku problem wynikał z tego, że WAMP używał innego php.ini dla CLI niż Apache, więc ustawienia dokonane za pomocą menu WAMP nie mają zastosowania do CLI. Po prostu zmodyfikuj CLI php.ini i działa.
źródło
C:\path\to\wamp\bin\php\php5.3.10\php.ini
w OpenSuse 12.1 jedyną wymaganą rzeczą było:
źródło
Dla mnie musiałem odkomentować te linie w php.ini:
„ext” ma zastosowanie, jeśli php_openssl.dll znajduje się w folderze „ext”.
Uwaga: musiałem to zrobić dla dwóch moich plików php.ini, w przeciwnym razie nie zadziała. Jeden znajduje się w folderze instalacyjnym vs.php, a drugi w folderze PHP
Źródło
źródło
Na MAC AMPPS zaktualizowałem php-5.5.ini o następujące i teraz działa.
źródło
W moim przypadku (PHP 7.3 w systemie Windows w trybie FastCGI) było to odkomentowane
extension=openssl
. Nie rozszerzenie = php_ openssl , jak większość ludzi publikuje tutaj.(To samo zostało opublikowane tutaj , ale bez szczegółów na temat systemu operacyjnego, co może być tutaj kluczową różnicą).
źródło
PHP7, w pliku php.ini, usuń znak „;” przed
extension=openssl
źródło
Problem z file_get_contents dla żądań https w Windows , odkomentuj następujące wiersze w pliku php.ini:
źródło
Możesz użyć tej funkcji, jeśli curl jest zainstalowany w twoim systemie:
źródło
Po całym dniu węszenia znalazłem odpowiedź dzięki temu przewodnikowi: http://piwigo.org/forum/viewtopic.php?id=15727
Zasadniczo w Eclipse -> Windows -> Preferencje -> Pliki wykonywalne PHP znajduje się sekcja dotycząca odwołań do plików .exe i .ini. Domyślne pliki znajdowały się w katalogu Eclipse podczas instalowania funkcji SDK narzędzi programistycznych PHP z Eclipses Zainstaluj nowe oprogramowanie w menu Pomoc.
Więc zamiast tego dodałem nowy plik wykonywalny o nazwie PHP 5.3.5 (CGI) i odwołałem się do cgi.exe i .ini z folderu php xampp.
Dziękuję webarto za poświęcenie czasu, aby mi pomóc.
źródło
Używam opsenSUSE Leap i miałem ten sam problem - oznacza to, że nie ma wsparcia dla OpenSSL. Oto jak to rozwiązałem:
sudo service apache2 restart
To wszystko, gotowe.
źródło
Mam też ten błąd. Doszedłem do wniosku, że moja wersja PHP nie ma wkompilowanego openssl, więc samo dodanie dyrektywy rozszerzenia do php.ini nie wystarczyło. Nie wiem, jak musisz to rozwiązać w twoim konkretnym przypadku, ale dla mnie używam macports, a polecenie było po prostu:
źródło
Dla tych, którzy używają Winginx (opartego na nginx zamiast na Apache), naprawiłem to za pomocą tych 4 kroków:
W menu Narzędzia kliknij Konfiguracja Winginx PHP5 (nie wspominając o 5 w nazwie ...):
Wybierz wersję PHP, którą chcesz zmienić w php.ini :
Na karcie Rozszerzenia PHP wybierz rozszerzenie php_openssl i naciśnij przycisk Zapisz :
zrestartuj odpowiednią usługę PHP za pomocą paska zadań ( Stop and Start ):
źródło
Spróbuj tego:
źródło
Jeśli korzystasz z serwera wamp, przejdź do ikony kliknij to
Następnie przejdź do PHP i kliknij rozszerzenie PHP, tam php_openssl będzie musiał aktywować i zrestartować serwer wamp
źródło
W pliku simple_html_dom.php zmień wartość
$offset
zmiennej z-1
na0
. ten błąd zwykle występuje podczas migracji do PHP 7.HtmlDomParser::file_get_html
używa domyślnego offsetu-1
, przekazanie0
powinno rozwiązać twój problem.źródło