Как включить обматывающие потоки HTTPS

Я установил php5 в свою систему Windows и попытался выполнить следующий скрипт с консолью командной строки:

<?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('Ymd\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; 

Но в нем говорится, что он не может найти обертку «https» и спрашивает, не забыл ли я включить ее при настройке PHP.

В чем проблема и как ее решить?

1: Проверьте, какие оболочки установлены.

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

2: Если вы не видите «https» в списке, добавьте / uncomment из php.ini

 extension=php_openssl.dll 

Перезагрузите сервер * и сделайте все.

* Если сервер не перезагружается, загрузите php_openssl.dll из какого-либо места и вставьте его в свой каталог расширений, определенный в файле php.ini, перезапустите сервер, скажите несколько адских марий и помолитесь.

Строка file_get_contents в конце вашего скрипта пытается отправить запрос HTTPS – см. URL-адрес в $req , который начинается с 'https://ec2...' .

Чтобы это было возможно, PHP нуждается в «обертке» для отправки HTTPS-запросов, которые, похоже, не установлены в вашей системе; что означает, что вы не можете отправлять запросы HTTPS, используя функции fopen familly.

Для получения дополнительной информации об обтекателях потоков, если вам интересно, вы можете взглянуть на Список поддерживаемых протоколов / Wrappers , а в вашем случае – HTTP и HTTPS .

Вам придется либо установить обертку HTTPs – в Windows, я понятия не имею, как это сделать, к сожалению …

Или вам придется использовать что-то еще, что file_get_contents для отправки вашего запроса HTTPS – я бы использовал функции, предоставляемые расширением curl (здесь тоже не уверен, что он будет работать «из коробки», хотя :-() ,

Например, вы можете взглянуть на то, что предлагается на странице руководства curl_exec :

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

Обратите внимание, что вам, вероятно, придется установить еще пару опций, используя curl_setopt – вы должны пройти через эту страницу: есть много полезных опций 😉

В качестве побочного элемента вы используете эту строку в начале своего скрипта:

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

Путь /etc/aws.conf кажется странным, поскольку вы сказали, что используете систему Windows: это похоже на тот путь, который будет использоваться в системе UNIX / Linux.

Откройте php.ini . Найдите эту строку:

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

вы хотите раскомментировать строку extension=ext/php_openssl.dll . Убедитесь, что в pho_openssl.dll ext/ находится файл pho_openssl.dll относительно вашего php.ini (или, что еще важнее, для переменной extension_dir в ini).

Просто. У меня была эта ошибка, и у меня были такие головные боли. Включите (раскомментируйте extension=php_openssl.dll строки extension=php_openssl.dll ) в файле php.ini. Это решит проблему.