Tidak dapat menemukan pembungkus "https" - apakah Anda lupa mengaktifkannya ketika Anda mengonfigurasi PHP?

143

Masalahnya ada di pertanyaan. Saya telah melakukan penyelidikan menyeluruh untuk solusi dalam hal ini dan saya tahu ada topik untuk ini dan saya telah mengikuti mereka juga dan tidak ada yang berhasil. Dikatakan bahwa saya akan menuliskan semua yang telah saya lakukan sejauh ini. Saya menjalankan PHP 5.2.14 dengan Zend Debugging pada versi Eclipse terbaru di komputer Windows XP saya. Saya memiliki 1 GB RAM. Saya menjalankan XAMPP dengan Apache, MySQL, dan FileZilla diinstal.

Pada XAMPP saya telah melakukan yang berikut (Apache mati selama perubahan ini): Mengklik Admin dari Panel Kontrol XAMPP dan pergi ke https:// localhost/xampp/. Dari sana saya menerima sertifikat dari baris ini di halaman sambutan:

Untuk dukungan OpenSSL silakan gunakan sertifikat tes dengan https: // 127.0.0.1 atau https: // localhost.

Pada bagian yang sama saya periksa phpinfo(). Di bawah 'Lingkungan', SERVER["HTTPS"]adalah on. Di bawah 'Lingkungan Apache', HTTPSadalah On. Di bawah 'Variabel PHP, _SERVER["HTTPS"]adalah On. Di bawah 'Phar', OpenSSL supportadalah disabled(instal ext / openssl). Saya tidak tahu cara mengaktifkan yang Phar.

Sekarang mengenai file-file itu sendiri di C: \ xampp, saya pergi ke folder PHP. Di bawah kedua produksi dan pengembangan file php.ini (lebih baik aman daripada menyesal), saya memiliki allow_url_fopen=On, allow_url_include=On, dan saya dihapus titik koma, sehingga extension=php_openssl.dlltidak lagi komentar. Saya bahkan mengkonfirmasi bahwa .dll ada di folder ext folder PHP. Baik libeay32.dll dan ssleay32.dll berada di folder PHP dan Apache. Folder Apache tidak mengandung file php.ini produktif atau pengembangan.

Saya telah mengunjungi http://www.slproweb.com/products/Win32OpenSSL.html dan menginstal Win32 OpenSSL v1.0.0d untuk mengukur keamanan.

Sekarang baris kode yang dipermasalahkan di myveve_website.php terlihat seperti ini:

$urlquery = "https://www.googleapis.com/customsearch/v1?key=".$appid."&cx=".$google_searchid."&q=".$query."&alt=atom&num=".$results;
$xmlresults = file_get_contents($urlquery);

Saya memiliki dua situs web lain yang saya minta tetapi mereka dilayani melalui HTTP dan berfungsi dengan baik. Saya juga memasukkan baris kode ini di dekat akhir skrip:

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

Ketika saya menjalankannya sebagai PHP Script on Eclipse, semuanya menampilkan dengan sangat baik seperti yang saya inginkan bersama dengan hasil ini:

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

Terlepas dari semua perubahan yang saya buat (setelah saya memulai Apache), saya masih mendapatkan kesalahan yang sama saat pertama kali saya mengakses skrip PHP saya di Eclipse dan Firefox melalui http: //localhost/tutorial/retrieve_website.php :

Peringatan: file_get_contents () [function.file-get-content]: Tidak dapat menemukan pembungkus "https" - apakah Anda lupa mengaktifkannya ketika Anda mengonfigurasi PHP? di C: \ xampp \ htdocs \ tutorial \ mengambilve_website.php on line 29

Peringatan: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= dihapus ID API & cx = ID pencarian yang dihapus & q = The + Devil + pergi + turun + ke + Georgia & alt = atom & num = 5) [function.file-get-content]: gagal membuka streaming: Tidak ada file atau direktori seperti itu di C: \ xampp \ htdocs \ tutorial \ retve_website.php pada baris 29

Peringatan: DOMDocument :: loadXML () [domdocument.loadxml]: String kosong diberikan sebagai input dalam C: \ xampp \ htdocs \ tutorial \ retve_website.php on line 33

openssl: no http wrapper: yes https wrapper: no wrappers: 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 "}

Apa yang saya abaikan atau gagal lakukan? Sepengetahuan saya sendiri, saya telah melakukan semua yang saya teliti tentang HTTPS dan OpenSSL

John M
sumber

Jawaban:

183

Aku dipecahkan di XAMPP oleh uncommenting ;extension=php_openssl.dlldi /apache/bin/php.ini meskipun phpinfo () mengatakan /php/php.iniadalah dimuat file ini.

EDIT: Saya kira jawaban Ezra adalah solusi terbaik langsung menambahkan garis ekstensi ke file ini sesuai.

kjetilh
sumber
1
Apakah Anda yakin itu /apache/bin/php.ini, saya tidak dapat menemukannya di XAMPP Portable Light 1.8.1? Namun php/php.iniada, tetapi mengaktifkan ssl di sini tidak membantu :(
vine'th
1
jawaban ini kemudian akan membuat masalah lain karena openssl sekarang dinonaktifkan dan akan membuat kesalahan jika saya mendapatkan tautan aman
get_file_contents
5
Bagi saya itu xampp/php/php.ini:) terima kasih, PS: JANGAN LUPA UNTUK MENGEMBALIKAN APACHE SETELAH PERUBAHAN SAVING
jave.web
97

Saya harus menambahkan extension=php_openssl.dllke php.inifile saya yang terletak di xampp/php/php.ini. Entah bagaimana itu tidak ada di sana, setelah menambahkan dan me-restart Apache semuanya bekerja dengan baik

Ezra
sumber
2
Saya harus menambahkan baris, karena tidak ada di php.ini - tapi kemudian lakukan triknya - terima kasih!
Q Studio
33

cukup tambahkan dua baris di file php.ini Anda.

extension=php_openssl.dll
allow_url_include = On

ini bekerja untuk saya.

Roopchand
sumber
7
Saya menggunakan wamp dan Anda perlu mengedit php.ini di folder apache daripada yang biasa di folder PHP: O
Al_
Terima kasih, itu allow_url_include = Onyang menyelesaikannya untukku.
Kiee
Jangan aktifkan allow_url_include - ini membuat server Anda rentan.
Pascal9x
18

Apache Anda mungkin tidak dikompilasi dengan dukungan SSL. Lagi pula, gunakan cURL sebagai ganti file_get_contents. Coba kode ini, jika gagal maka saya benar.

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;
}
Dejan Marjanović
sumber
1
menjalankan fungsi keriting yang Anda berikan kepada saya dan diganti $xmlresults = file_get_contents($urlquery);dengan $xmlresults = curl($urlquery);. PHP Script menjalankannya dengan hasil yang sama dengan file_get_contents (). Menjalankannya sebagai Halaman Web PHP via localhost / tutorial / recoverve_website.php dan saya mendapatkan kesalahan ini:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
John M
1
Masalahnya adalah probaby dalam dukungan SSL, jalankan phpinfo () dan periksa apakah ada perintah / flag berikut :, pada '--with-openssl=/usr' '--with-openssl-dir=/usr'dasarnya Anda perlu mengkompilasi Apache dengan dukungan SSL, Anda juga harus mengaktifkan cURL yang beberapa kali lebih cepat dari FGC, dan memiliki banyak opsi. Saya tidak tahu bagaimana melakukan ini di Windows, maaf.
Dejan Marjanović
1
Satu-satunya hal yang dekat dengan itu adalah Konfigurasi Perintah di bagian atas phpinfo () dan yang tidak memiliki apa pun yang mengandung --with-openssl terkait. ini berisi hal-hal lain --dengan. pembaruan kecil: di localhost, status diperiksa dan dikatakan HTTPS (SSL) diaktifkan.
John M
1
Jika Anda memohon return curl_exec($curl);, bukankah itu akan mencegah curl_close($curl);eksekusi pada baris berikutnya?
Jason Plank
12

Saya telah mengaktifkan ekstensi openssl dan berfungsi untuk saya :)

; extension = php_openssl.dll

untuk

extension = php_openssl.dll

Saran Pal
sumber
6

Dalam kasus saya, masalahnya adalah karena WAMP menggunakan php.ini yang berbeda untuk CLI dari Apache, jadi pengaturan Anda yang dibuat melalui menu WAMP tidak berlaku untuk CLI. Cukup modifikasi CLI php.ini dan berfungsi.

dtbarne
sumber
1
Bagaimana Anda melakukannya di mana saya dapat menemukan CLI php.ini
botenvouwer
1
C:\path\to\wamp\bin\php\php5.3.10\php.ini
Milik
2
terima kasih atas jawaban Anda, saya pikir di sana ada beberapa file php.ini. Ketika saya mencari saya hanya menemukan satu dan saya uncommented:; extension = php_openssl.dll Tapi saya menggunakan xammp saya bingung dengan wamp. Sekarang berhasil, ya!
botenvouwer
6

di OpenSuse 12.1 satu-satunya yang diperlukan adalah:

zypper in php5-openssl
TheSatinKnight
sumber
1
Bisakah Anda jelaskan ??
Jason W
1
Maksud saya, saya mendapatkan pesan kesalahan "Tidak dapat menemukan pembungkus" https "- apakah Anda lupa untuk mengaktifkannya ketika Anda mengkonfigurasi PHP?" dan mengatasinya dengan memasukkan "zypper di php5-openssl" di baris perintah. Itu memperbaiki kesalahan.
TheSatinKnight
5

Bagi saya, saya harus menghapus tanda komentar pada baris-baris ini di php.ini:

extension=php_openssl.dll
extension_dir = "ext"

"ext" berlaku jika php_openssl.dll terletak di folder "ext".

Catatan: Saya harus melakukan ini untuk dua file php.ini saya jika tidak maka tidak akan berfungsi. Satu terletak di folder instalasi vs.php, dan yang lainnya di folder PHP

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

Sumber

zeta
sumber
5

Pada MAC AMPPS, saya memperbarui php-5.5.ini dengan yang berikut ini dan sekarang berfungsi.

allow_url_include = On
extension=openssl.so
Elye
sumber
5

Dalam kasus saya (PHP 7.3 pada Windows dalam mode FastCGI) itu tidak menyenangkan extension=openssl. Bukan ekstensi = php_ openssl , karena kebanyakan orang memposting di sini.

(Hal yang sama diposting di sini , tetapi tanpa rincian tentang OS yang mungkin menjadi perbedaan utama di sini.)

1234ru
sumber
4

PHP7, dalam file php.ini, hapus ";" sebelumextension=openssl

Shusen Yi
sumber
4

Masalah dengan file_get_contents untuk permintaan https di Windows , batalkan komentar pada baris berikut di file php.ini:

extension=php_openssl.dll
extension_dir = "ext"
Sandra
sumber
4

Anda dapat menggunakan fungsi ini sebagai gantinya jika curl diinstal pada sistem Anda:

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;  
}
pelaku315
sumber
2

Setelah mengintip sepanjang hari, saya menemukan jawabannya berkat panduan ini: http://piwigo.org/forum/viewtopic.php?id=15727

Pada dasarnya di bawah Eclipse -> Windows -> Preferences -> PHP Executables, ada bagian di mana .exe dan .ini direferensikan. Yang default berada di direktori Eclipse ketika Anda menginstal Fitur SDK Alat Pengembangan PHP dari Eclipses Instal Perangkat Lunak Baru di menu Bantuan.

Jadi alih-alih itu, saya menambahkan executable baru bernama PHP 5.3.5 (CGI) dan mereferensikan cgi.exe dan .ini dari folder php xampp.

Terima kasih webarto telah memberikan waktu Anda untuk membantu saya.

John M
sumber
2

Saya menggunakan opsenSUSE Leap, dan saya memiliki masalah yang sama - itu berarti tidak ada dukungan untuk OpenSSL. Inilah cara saya mengatasinya:

  1. Buka YaST.
  2. Pergi ke Manajemen Perangkat Lunak.
  3. Di kotak pencarian di panel kiri, masukkan 'php5-openssl' dan tekan tombol kembali.
  4. Klik kotak centang di sebelah 'php5-openssl' di panel kanan untuk memilihnya, dan klik 'Terima' (Ini menambahkan dukungan OpenSSL).
  5. Mulai ulang Apache: sudo service apache2 restart

Itu dia, sudah selesai.

mtchuente
sumber
1

Saya mendapat kesalahan ini juga. Saya tahu bahwa versi PHP saya tidak memiliki kompilasi openssl, jadi hanya menambahkan direktif ekstensi ke php.ini tidak cukup. Saya tidak tahu bagaimana Anda harus menyelesaikan ini dalam kasus khusus Anda, tetapi bagi saya, saya menggunakan macports, dan perintahnya adalah:

sudo port install php5-openssl
tukang batu
sumber
1

Bagi mereka yang menggunakan Winginx (berbasis nginx dan bukan berbasis Apache), saya memperbaikinya dengan 4 langkah ini:

  1. Pada menu Alat tekan Winginx PHP5 Config (apalagi 5 dalam nama ...):

    Konfigurasi Winginx PHP5

  2. Pilih versi PHP yang Anda ingin ubah php.ini :

    Pemilihan versi PHP

  3. Pada tab Ekstensi PHP pilih ekstensi php_openssl dan tekan tombol Simpan :

    pemilihan php_openssl

  4. restart layanan PHP yang sesuai melalui taskbar ( Stop and Start ):

    Mulai ulang layanan PHP

CPHPython
sumber
1

Coba ini:

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

paprik
sumber
2
Bagaimana ini berbeda dari jawaban yang sudah ada di pertanyaan ini ?
HPierce
@HPierce ia memiliki 2 baris yang akan menyebabkan kesalahan sintaksis karena operator eksponensial di awal dan akhir dari garis-garis ... Ditandai untuk dihapus.
CPHPython
@ CPHPython Saya pikir mereka mencoba menggunakan gaya tebal di dalam blok kode
Nick
1
@CPHPython, Anda dapat membuat kode tebal, tetapi Anda harus menggunakan sintaks yang berbeda ... Jika Anda melakukan <code> <pre> kode normal ... kode tebal dengan *'s </pre> </code> Anda mendapatkannya :-). Tampaknya saya tidak tahu bahwa pada tahun 2016 atau saya mungkin telah mengedit ini. Bagaimanapun, saya senang melihatnya dihapus.
HPierce
1
@Nick, Anda dapat kode tebal! Saya tidak percaya itu didokumentasikan di mana saja. Saya sudah melakukannya di sini sebagai contoh, tetapi saya pikir ini masih akan dihapus.
HPierce
0

Jika Anda menggunakan server wamp maka buka ikon klik ini ikon wamp server klik ini

Kemudian pergi ke PHP lalu klik pada ekstensi PHP akan ada php_openssl perlu diaktifkan dari sana dan restart server wamp aktif php_openssl dari sini

ML680
sumber
-1

Di dalam simple_html_dom.php, ubah nilai $offsetvariabel dari -1menjadi 0. kesalahan ini biasanya terjadi ketika Anda bermigrasi ke PHP 7.

HtmlDomParser::file_get_htmlmenggunakan offset default -1, melewatinya 0akan memperbaiki masalah Anda.

Otak yang kuat
sumber