it-swarm.com.de

So aktivieren Sie HTTPS-Stream-Wrapper

Ich habe php5 auf meinem Windows-System installiert und versucht, das folgende Skript mit einer Befehlszeilenkonsole auszuführen:

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

Es sagt jedoch, dass es den Wrapper nicht finden kann "https" und fragt, ob ich vergessen habe, es zu aktivieren, wenn ich PHP konfiguriere. 

Was ist das Problem und wie wird es gelöst?

16
Tamppox

1: Überprüfen Sie, welche Wrapper installiert sind.

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

2: Wenn in der Liste "https" nicht angezeigt wird, fügen Sie die php.ini hinzu, um das Kommentarzeichen zu entfernen

extension=php_openssl.dll

Starten Sie Ihren Server * neu und fertig.

* Wenn der Server nicht neu starten kann, laden Sie die Datei php_openssl.dll von irgendwo herunter und stecken Sie sie in Ihr Erweiterungsverzeichnis, das in der Datei php.ini definiert ist. Starten Sie den Server neu, sagen Sie ein paar Höllenmenschen und beten Sie.

39
Drew

Die file_get_contents-Zeile am Ende Ihres Skripts versucht, eine HTTPS-Anforderung zu senden - siehe URL in $req, die mit 'https://ec2...' beginnt.

Damit dies möglich ist, benötigt PHP einen "Wrapper" zum Senden von HTTPS-Anforderungen - der auf Ihrem System nicht installiert zu sein scheint. Das bedeutet, dass Sie HTTPS-Anforderungen nicht mit der Funktionsfamilie fopen senden können.

Weitere Informationen zu Stream-Wrappern erhalten Sie, wenn Sie neugierig sind, auf Liste der unterstützten Protokolle/Wrapper und in Ihrem Fall HTTP und HTTPS .

Sie müssen entweder den HTTP-Wrapper installieren - unter Windows weiß ich leider nicht, wie das geht ...


Oder Sie müssen etwas anderes als file_get_contents verwenden, um Ihre HTTPS-Anfrage zu senden. Ich würde die von curl extension bereitgestellten Funktionen verwenden. (Auch hier nicht sicher, ob es funktioniert "out of the box", obwohl :-() .

Als Beispiel können Sie einen Blick auf die Vorschläge auf der Handbuchseite von curl_exec werfen: 

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

Beachten Sie, dass Sie wahrscheinlich ein paar weitere Optionen festlegen müssen, indem Sie curl_setopt - verwenden. Sie sollten diese Seite durchgehen: Es gibt viele nützliche Optionen ;-)


Als Randnotiz verwenden Sie diese Zeile am Anfang Ihres Skripts:

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

Der Pfad /etc/aws.conf fühlt sich seltsam an, wie Sie sagten, Sie verwenden ein Windows-System: Dies sieht aus wie der Pfad, den Sie auf einem UNIX/Linux-System verwenden würden.

10
Pascal MARTIN

Öffnen Sie php.ini. Finden Sie diese Zeile:

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

sie möchten die extension=ext/php_openssl.dll-Zeile auskommentieren. Stellen Sie sicher, dass sich eine pho_openssl.dll-Datei im ext/-Verzeichnis befindet, relativ zu Ihrem php.ini (oder wichtiger noch zur extension_dir-Variablen im ini).

3
n611x007

Einfach. Ich hatte diesen Fehler und hatte solche Kopfschmerzen. Aktivieren Sie die Zeile extension=php_openssl.dll in Ihrer php.ini-Datei. Dies löst das Problem.

0
heinkasner