“Https” sarmalayıcısı bulunamıyor - PHP'yi yapılandırırken etkinleştirmeyi unuttunuz mu?


144

Sorun söz konusu. Bununla ilgili çözümler için kapsamlı bir araştırma yaptım ve bunun konularının olduğunu biliyorum ve onları da takip ettim ve hiçbir şey işe yaramadı. Şu ana kadar yaptığım her şeyi listeleyeceğim söyleniyor. Windows XP bilgisayarımdaki en son Eclipse sürümünde Zend Debugging ile PHP 5.2.14 çalıştırıyorum. 1 GB RAM'im var. Yüklü Apache, MySQL ve FileZilla ile çalışan XAMPP var.

XAMPP'de aşağıdakileri yaptım (Bu değişiklikler sırasında Apache kapalıydı): XAMPP Kontrol Panelinden Yönetici'yi tıklayıp adresine gittik https:// localhost/xampp/. Oradan karşılama sayfasında bu satırdan certs kabul:

OpenSSL desteği için lütfen https: // 127.0.0.1 veya https: // localhost içeren test sertifikasını kullanın.

Aynı bölümde kontrol ettim phpinfo(). 'Çevre' altında, SERVER["HTTPS"]bir on. 'Apaçi Çevre' altında, HTTPSbir On. 'PHP değişkenleri altında _SERVER["HTTPS"]olduğunu On. 'Phar' altında OpenSSL supportolduğu disabled(dahili / openssl yüklemek). Phar'ı nasıl etkinleştireceğimi bilmiyorum.

Şimdi C: \ xampp dosyalarında kendilerini PHP klasörüne gittim. (Üzgün daha iyi güvenli) hem üretim ve geliştirme php.ini dosyaları altında ben allow_url_fopen=On, allow_url_include=Onve bu yüzden, noktalı virgül kaldırıldı extension=php_openssl.dllartık dışarı yorum. Hatta .dll PHP klasörünün ext klasöründe olduğunu doğruladı. Hem libeay32.dll hem de ssleay32.dll, PHP ve Apache klasörlerinde bulunur. Apache klasörü üretken veya geliştirme php.ini dosyalarını içermez.

Http://www.slproweb.com/products/Win32OpenSSL.html adresine gittim ve güvenli ölçüm için Win32 OpenSSL v1.0.0d'yi yükledim.

Şimdi benim retrieve_website.php söz konusu kod satırı şöyle:

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

Sorguladığım diğer iki web sitem var ama HTTP ile sunuluyor ve iyi çalışıyor. Ayrıca kodun sonuna yakın girilen bu kod satırı var:

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

Eclipse üzerinde bir PHP Script olarak çalıştırdığımda, her şey mükemmel bu çıktıları ile birlikte istediğim şekilde mükemmel çıktılar:

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

Yaptığım tüm bu değişikliklere rağmen (Apache'yi başlattıktan sonra), Eclipse ve Firefox'taki PHP betiğime http: //localhost/tutorial/retrieve_website.php aracılığıyla ilk kez eriştiğimde hala aynı hataları alıyorum :

Uyarı: file_get_contents () [function.file-get-content]: "https" sarmalayıcısı bulunamıyor - PHP'yi yapılandırırken etkinleştirmeyi unuttunuz mu? C: \ xampp \ htdocs \ tutorial \ retrieve_website.php satırında 29

Uyarı: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= kaldırıldı API Kimliği & cx = kaldırılan arama kimliği & q = + Şeytan + + aşağı + + Georgia + alt + atom & num = 5'e gitti) [function.file-get-content]: akış açılamadı: 29. satırda C: \ xampp \ htdocs \ tutorial \ retrieve_website.php dosyasında böyle bir dosya veya dizin yok

Uyarı: DOMDocument :: loadXML () [domdocument.loadxml]: 33. satırdaki C: \ xampp \ htdocs \ tutorial \ retrieve_website.php dosyasına giriş olarak sağlanan boş dize

openssl: hayır http sarmalayıcı: evet https sarmalayıcı: sarmalayıcı yok: dizi (10) {[0] => dize (3) "php" [1] => dize (4) "dosya" [2] => dize (4 ) "glob" [3] => dize (4) "veri" [4] => dize (4) "http" [5] => dize (3) "ftp" [6] => dize (3) " zip "[7] => dize (13)" sıkıştır.zlib "[8] => dize (14)" sıkıştır.bzip2 "[9] => dize (4)" phar "}

Göz ardı ettiğim ya da yapamadığım şey nedir? Kendi bilgime göre, HTTPS ve OpenSSL ile ilgili araştırdığım her şeyi yaptım

Yanıtlar:


183

Ben uncommenting XAMPP çözdün ;extension=php_openssl.dllde /apache/bin/php.ini rağmen phpinfo () bana /php/php.iniyüklenen ini dosyası oldu.

DÜZENLEME: Sanırım Ezra cevabı, uzantı satırını uygun ini dosyasına doğrudan ekleyerek en iyi çözümdür.


1
/apache/bin/php.iniXAMPP Taşınabilir Işık 1.8.1'de bulamadığımdan emin misiniz ? Ancak php/php.inivar, ancak burada
ssl'yi

1
Bu cevap daha sonra başka bir sorun yaratacaktır, çünkü openssl artık devre dışıdır ve güvenli bir bağlantı alırsam hata gönderir
thedjaney

5
Benim için xampp/php/php.ini:) teşekkürler, PS: TASARRUF DEĞİŞİKLİKLERİNDEN SONRA
APACHE'İ

97

Ben eklemek zorunda extension=php_openssl.dllbenim için php.inibulunan dosyanın xampp/php/php.ini. Her nasılsa orada değildi, ekledikten ve Apache'yi yeniden başlattıktan sonra her şey iyi çalışıyordu.


2
Ben php.ini değildi gibi satır eklemek zorunda - ama sonra hile yaptı - teşekkürler!
Q Studio

33

sadece php.ini dosyanıza iki satır ekleyin.

extension=php_openssl.dll
allow_url_include = On

benim için çalışıyor.


7
Ben wamp kullanıyorum ve apache klasöründe php.ini düzenlemek gerekir yerine PHP klasöründe her zamanki: O
Al_

Teşekkür ederim, allow_url_include = Onbenim için çözen buydu.
Kiee

Allow_url_include özelliğini etkinleştirmeyin - bu, sunucunuzu savunmasız hale getirir.
Pascal9x

18

Apache'niz muhtemelen SSL desteği ile derlenmemiştir. Yine de file_get_contents yerine cURL kullanın. Bu kodu deneyin, başarısız olursa ben haklıyım.

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

1
Bana verdiğin kıvrılma işlevini çalıştırdım ve $xmlresults = file_get_contents($urlquery);onunla değiştirdin $xmlresults = curl($urlquery);. PHP Script file_get_contents () ile aynı sonuçlarla gayet iyi çalıştı. Localhost / tutorial / retrieve_website.php üzerinden PHP Web Sayfası olarak çalıştırıyorum ve bu hatayı alıyorum:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
John M

1
Sorun SSL desteğinde probaby, phpinfo () komutunu çalıştırın ve aşağıdaki komutların / bayrakların olup olmadığını kontrol edin: '--with-openssl=/usr' '--with-openssl-dir=/usr'Temel olarak Apache'yi SSL desteği ile derlemeniz gerekir, ayrıca FGC'den birkaç kat daha hızlı olan ve çok sayıda seçeneğe sahip olan cURL'yi etkinleştirmelisiniz. Bunu Windows'ta nasıl yapacağım hakkında hiçbir fikrim yok, üzgünüm.
Dejan Marjanović

1
buna yakın tek şey phpinfo'nun () üstündeki Komutu Yapılandır ve --with-openssl ile ilgili bir şey içermiyor. başka şeyler de içerir. küçük güncelleme: localhost üzerinde, kontrol durumu ve HTTPS (SSL) aktif olduğunu söylüyor.
John M

1
Eğer çağırırsanız return curl_exec($curl);, curl_close($curl);bu sonraki satırda yürütülmesini engellemez mi?
Jason Plank

12

Openssl uzantısını etkinleştirdim ve benim için çalışıyor :)

; Uzantısı = php_openssl.dll

için

uzantısı = php_openssl.dll


6

Benim durumumda, sorun WAMP için Apache'den farklı bir php.ini kullanan WAMP nedeniyle, bu yüzden WAMP menüsünden yapılan ayarlarınız CLI için geçerli değildir. Sadece CLI php.ini değiştirin ve çalışır.


1
Wel CLI php.ini nerede bulabilirim
botenvouwer

1
Benimki burada:C:\path\to\wamp\bin\php\php5.3.10\php.ini
dtbarne

2
Cevabınız için teşekkürler, orada nerede birden çok php.ini dosyaları düşündüm. Aradığımda sadece bir tane buldum ve uncommented:; extension = php_openssl.dll Ama wammp ile karıştırdım xammp kullanın. Şimdi çalışıyor, evet!
botenvouwer

6

OpenSuse 12.1'de gereken tek şey:

zypper in php5-openssl

1
açıklayabilir misiniz lütfen??
Jason W

1
Yani "https" sarmalayıcısı bulunamadı - PHP'yi yapılandırırken etkinleştirmeyi unuttunuz mu? "Hata mesajını aldım. ve komut satırına "php5-openssl içinde zypper" girerek çözdüm. Bu hatayı düzeltti.
TheSatinKnight

5

Benim için php.ini bu satırları uncomment zorunda kaldı:

extension=php_openssl.dll
extension_dir = "ext"

"ext", php_openssl.dll "ext" klasöründe bulunuyorsa uygulanabilir.

Not: Bunu benim php.ini dosyaları iki için yapmak zorunda kaldı aksi takdirde işe yaramaz. Biri vs.php kurulum klasöründe, diğeri PHP klasöründe bulunur

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

Kaynak


5

MAC AMPPS'de php-5.5.ini dosyasını aşağıdakilerle güncelledim ve şimdi çalışıyor.

allow_url_include = On
extension=openssl.so

5

Benim durumumda (FastCGI modunda Windows'ta PHP 7.3) bu rahatsız edici oldu extension=openssl. Çoğu kişi burada yayınladığı için extension = php_ openssl değil .

(Aynı şey burada yayınlanmıştır , ancak işletim sistemi hakkında ayrıntılar olmadan burada önemli bir fark olabilir.)



4

Windows'ta https istekleri için file_get_contents ile ilgili sorun , php.ini dosyasında aşağıdaki satırların açıklamasını kaldırın:

extension=php_openssl.dll
extension_dir = "ext"

4

Sisteminizde curl yüklüyse bunun yerine bu işlevi kullanabilirsiniz:

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

2

Bütün gün gözetledikten sonra, bu kılavuz sayesinde cevabı anladım: http://piwigo.org/forum/viewtopic.php?id=15727

Temelde Eclipse -> Windows -> Tercihler -> PHP Yürütülebilir dosyaları altında, .exe ve .ini dosyalarına başvurulan bir bölüm vardır. Yardım menüsündeki Eclipses Yeni Yazılım Yükle'den PHP Geliştirme Araçları SDK Özelliği'ni yüklediğinizde, varsayılan olanlar Eclipse dizinindeydi.

Bunun yerine, PHP 5.3.5 (CGI) adlı yeni bir yürütülebilir dosya ekledim ve xampp'in php klasöründen cgi.exe ve .ini'ye başvurdum.

Bana yardım etmek için zaman ayırdığınız için teşekkür ederim webarto.


2

OpsenSUSE Sıçraması kullanıyorum ve aynı sorunu yaşadım - bu OpenSSL için destek olmadığı anlamına geliyor. Ben bu şekilde çözdüm:

  1. YaST'ı açın.
  2. Yazılım Yönetimine gidin.
  3. Sol bölmedeki arama kutusuna 'php5-openssl' girin ve dönüş tuşuna basın.
  4. Seçmek için sağ bölmedeki 'php5-openssl' seçeneğinin yanındaki onay kutusunu tıklayın ve 'Kabul Et'i tıklayın (Bu OpenSSL desteği ekler).
  5. Apache'yi yeniden başlat: sudo service apache2 restart

Hepsi bu, bitti.


1

Ben de bu hatayı aldım. Ben PHP benim sürümü derlenmiş openssl olmadığını anladım, bu yüzden sadece php.ini uzantısı yönergesi eklemek yeterli değildi. Bunu sizin özel durumunuzda nasıl çözmeniz gerektiğini bilmiyorum, ama benim için macport kullanıyorum ve komut sadece:

sudo port install php5-openssl

1

Kullananlar için Winginx (nginx yerine göre Apache göre) I bu 4 aşamada ile sabit:

  1. On Tools menüsü isabet Winginx PHP5 Yapılandırm (aldırma 5 ... adına):

    Winginx PHP5 Yapılandırması

  2. Php.ini dosyasının değiştirmesini istediğiniz PHP sürümünü seçin :

    PHP sürüm seçimi

  3. On PHP Uzantıları sekmesinin seçmek php_openssl uzantısı ve isabet kaydet butonuna:

    php_openssl seçimi

  4. görev çubuğundan uygun PHP hizmetini yeniden başlatın ( Durdur ve Başlat ):

    PHP hizmetini yeniden başlat


1

Bunu dene:

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


2
Bu zaten bu soruda bulunan bu cevaptan nasıl farklı ?
HPierce

@HPierce , bu satırların başında ve sonunda üs alma işleci nedeniyle sözdizimi hatasına neden olacak 2 satıra sahiptir ... Silinmek üzere işaretlenmiştir.
CPHPython

@CPHPython Bence bir kod bloğu içinde kalın stili kullanmaya çalıştılar
Nick

1
@CPHPython, Kalın yazılabilir, ancak farklı sözdizimi kullanmanız gerekir ... <code> <pre> normal kodu yaparsanız * * s </pre> </code> ile kalın kod alırsanız :-). Görünüşe göre 2016'da bilmiyordum ya da bunu düzenleyebilirdim. Ne olursa olsun, silindiğini gördüğüme sevindim.
HPierce

1
@Nick, Sen cesur kod! Hiçbir yerde belgelendiğine inanmıyorum. Burada bir örnek olarak yaptım, ama bunun hala silineceğini düşünüyorum.
HPierce

0

Eğer wamp sunucusu kullanıyorsanız o zaman ikonuna tıklayın wamp server ikonuna tıklayın

Sonra PHP'ye gidin ve PHP uzantısına tıklayın, oradan etkinleştirilmesi ve wamp sunucusunu yeniden başlatması gereken php_openssl olurdu buradan aktif php_openssl


-1

İçinde simple_html_dom.php değişim değeri $offsetgelen değişkeni -1için 0. bu hata genellikle PHP 7'ye geçiş yaptığınızda oluşur .

HtmlDomParser::file_get_htmlvarsayılan bir ofset kullanır -1, iletmek 0sorununuzu çözmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.