HTTPS akışı sarma nasıl etkinleştirilir

3 Cevap php

Benim windows sistemde php5 yüklü ve bir komut satırı konsolu ile aşağıdaki komut dosyası çalıştırmak için çalıştı:

<?php
// load in credentials
$creds = parse_ini_file('/etc/aws.conf');

// Define query string keys/values
$params = array(
    'Action' => 'DescribeAvailabilityZones',
    'AWSAccessKeyId' => $creds['access_key'],
    'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
    'Version' => '2008-05-05',
    'ZoneName.0' => 'us-east-1a',
    'ZoneName.1' => 'us-east-1b',
    'ZoneName.2' => 'us-east-1c',
    'SignatureVersion' => 2,
    'SignatureMethod' => 'HmacSHA256'
);

// See docs
// http://tr.im/jbjd
uksort($params, 'strnatcmp');
$qstr = '';
foreach ($params as $key => $val) {
    $qstr .= "&{$key}=".rawurlencode($val);
}
$qstr = substr($qstr, 1);

// Signature Version 2
$str = "GET\n"
     . "ec2.amazonaws.com\n"
     . "/\n"
     . $qstr;

// Generate base64-encoded RFC 2104-compliant HMAC-SHA256
// signature with Secret Key using PHP 5's native 
// hash_hmac function.
$params['Signature'] = base64_encode(
    hash_hmac('sha256', $str, $creds['secret_key'], true)
);

// simple GET request to EC2 Query API with regular URL 
// encoded query string
$req = 'https://ec2.amazonaws.com/?' . http_build_query(
    $params
);
$result = file_get_contents($req);

// do something with the XML response
echo $result;

Ama bu "https" sarıcı bulmak mümkün değil ve ben PHP yapılandırıldığında etkinleştirmek unutmak sorar söylüyor.

Nasıl yerleşmek için bir sorun ve nedir?

3 Cevap

1: sarma yüklü olduğunu kontrol edin.

<?php var_dump(stream_get_wrappers()); ?>

2: Eğer listede "https" görmüyorsanız, php.ini den / dosyamıza eklemek

extension=php_openssl.dll

Sunucu * yeniden başlatın ve bitti.

Sunucu bir yerden indirme php_openssl.dll gitmek ve php.ini dosyasında tanımlanan sizin uzantıları dizinde sopa yeniden başarısız olursa *, yeniden başlatma sunucu, bir kaç cehennem mary diyelim ve dua.

Senaryonun sonunda file_get_contents çizgisi, bir HTTPS isteği göndermek için çalışıyor - 'https://ec2...' başlar $req URL'yi, bkz.

Bu mümkün olabilmesi için, PHP HTTPS istekleri göndermek için bir "kapsayıcı" ihtiyacı - sisteminizde yüklü olması görünmüyor ki; hangi fonksiyonların fopen familly kullanılarak HTTPS istekleri göndermek anlamına gelir.

Eğer meraklı iseniz akım sarmalayıcılarla hakkında daha fazla bilgi almak için, size List of Supported Protocols/Wrappers de bir göz atabilirsiniz, ve, senin durumunda, HTTP and HTTPS.

Sen HTTPS sarıcı yüklemek zorundasınız ya - Windows, ne yazık ki, bunu nasıl hiçbir fikrim yok ...


Or you'll have to use something else that file_get_contents to send your HTTPS request -- I would use the functions provided by the curl extension (Here, too, not sure it will work "out of the box", though :-( ).

Bir Örneğin, manuel sayfasında teklif ne bir göz atın curl_exec yapabilirsiniz:

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

Muhtemelen curl_setopt kullanarak, bir çift daha seçeneklerini ayarlamak gerekir unutmayın - bu sayfada geçmesi gerekir: kullanışlı seçenekler bir yeri vardır ;-)


As a sidenote, you are using this line at the beginning of your script :

$creds = parse_ini_file('/etc/aws.conf');

Eğer Windows sistemi kullanıyorsanız söylediğim gibi yol /etc/aws.conf, garip hissediyor: bu bir UNIX / Linux sistemi kullanmak istiyorsunuz yolunun tür gibi görünüyor.

Açık php.ini. Bu satırı bulun:

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; ...
;extension=ext/php_oci8.dll
extension=ext/php_openssl.dll         ; <---- you want this
;extension=ext/php_pdo_firebird.dll
; ...

Eğer extension=ext/php_openssl.dll uncomment istiyorum. Lütfen php.ini (ya da belki daha da önemlisi extension_dir değişken için göreli ext/ dizininde bir pho_openssl.dll dosyası olduğundan emin olun ini).