https ile file_get_contents?

8 Cevap php

Ben kredi kartı işlem kurma üzerinde çalışan ve CURL için bir çözüm kullanmak için gerekli, ve ben (SSL URL çağırarak değil) test sunucusunu kullanarak zaman aşağıdaki kod iyi çalıştı, ama ben şimdi bunu test ediyorum ne zaman https ile çalışan sunucuda, bu ("failed to open stream") çalışmıyor.

function send($packet, $url) {
  $ctx = stream_context_create(
    array(
      'http'=>array(
        'header'=>"Content-type: application/x-www-form-urlencoded",
        'method'=>'POST',
        'content'=>$packet
      )
    )
  );
  return file_get_contents($url, 0, $ctx);
}

8 Cevap

Php komut için geçerli bir https sarıcı olup olmadığını görmek için aşağıdaki komut dosyasını deneyin.

$w = stream_get_wrappers();
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);

çıkış gibi bir şey olmalı

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(11) {
  [...]
}

To allow https wrapper : - the php_openssl extension must exist and be enabled - allow_url_fopen must be set to on

mevcut değilse php.ini dosyasında bu satırları ekleyin:

extension=php_openssl.dll

allow_url_fopen = On

Aşağıdaki deneyin:

function getSslPage($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

Bu muhtemelen hedef sunucu geçerli bir SSL sertifikası olmamasından kaynaklanmaktadır.

Sadece php.ini dosyasına iki satırı ekleyin.

extension=php_openssl.dll

allow_url_include = On

Onun benim için çalışıyor.

Ben aynı hata vardı. allow_url_include = On ayar php.ini benim için sabit.

Benim durumumda, sorun Apache daha CLI için farklı bir php.ini kullanarak WAMP nedeniyle, bu yüzden WAMP menü aracılığıyla yapılan ayarlarınız CLI için geçerli değildir. Sadece CLI php.ini değiştirmek ve o inşaat.

Bazen bir sunucu görür veya (örneğin uygun bir kullanıcı ajan olarak) http istek başlıklarına görmüyor ne dayalı yanıt seçecektir. Eğer bir tarayıcı ile bağlanabilir, eğer gönderir başlıkları kapmak ve dere bağlamda onları taklit.