Я установил 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. Это решит проблему.