IAM角色名称在Yii 1中被视为班级 [英] IAM Role Name considred as Class in Yii 1

查看:83
本文介绍了IAM角色名称在Yii 1中被视为班级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已将该策略附加到EC2 IAM角色以访问AWS服务.之后,我在Yii 1控制器文件中使用了以下代码:

I have attached the policy to EC2 IAM role to access AWS services. After that i have have used below code in Yii 1 controller file:

ExampleController.php

class ExampleController extends Controller
{
    public function init()
    {
        require_once dirname(dirname(__FILE__)) . '/extensions/awsv3/vendor/autoload.php';
        $config = array(
                'version' => 'latest',
                'region' => 'us-west-2',
        );
        $s3_instance = new \Aws\Ssm\SsmClient($config);
        $result = $s3_instance->getParameters([
            'Names' => array('host_name'),
            'WithDecryption' => true
        ]);
        //converting S3 private data to array to read
        $keys = $result->toArray();
        var_dump($keys);
        exit("Exit");
    }
}

输出

PHP警告
include(TestRole.php):打开流失败:没有这样的文件或目录

PHP warning
include(TestRole.php): failed to open stream: No such file or directory

注意:TestRole是IAM角色名称.

Note: TestRole is IAM Role Name.

我在单个PHP文件中使用了相同的代码(与Yii1无关)

I have used same code in Single PHP file (Not ties with Yii1)

test.php

require_once 'protected/extensions/awsv3/vendor/autoload.php';
$config = array(
        'version' => 'latest',
        'region' => 'us-west-2',
);
$s3_instance = new \Aws\Ssm\SsmClient($config);
$result = $s3_instance->getParameters([
    'Names' => array('host_name'),
    'WithDecryption' => true
]);
//converting S3 private data to array to read
$keys = $result->toArray();
var_dump($keys);
exit("Exit");

array(3){[" Parameters] => array(1){[0] => array(3){[" Name] =>字符串(12)" host_name"[" Type] = > string(6)"String" ["Value"] => string(9)"localhost"}} ["InvalidParameters"] => array(0){} ["@metadata"] => array(4){ ["statusCode"] => int(200)["effectiveUri"] =>字符串(35)" https://ssm.us-west-2.amazonaws.com "["标头] => array(4){[""x-amzn-requestid"] =>字符串(36)"d3fb85bc- da4e-494b-be4f-b31fe3814100"[" content-type] =>字符串(26)" application/x-amz-json-1.1"[" content-length] =>字符串(3)" 182"["日期] =>字符串(29)"星期二,2018年6月19日格林尼治标准时间"} ["transferStats"] => array(1){["http"] => array(1){[0] => array(0){}}}}}退出

array(3) { ["Parameters"]=> array(1) { [0]=> array(3) { ["Name"]=> string(12) "host_name" ["Type"]=> string(6) "String" ["Value"]=> string(9) "localhost" } } ["InvalidParameters"]=> array(0) { } ["@metadata"]=> array(4) { ["statusCode"]=> int(200) ["effectiveUri"]=> string(35) "https://ssm.us-west-2.amazonaws.com" ["headers"]=> array(4) { ["x-amzn-requestid"]=> string(36) "d3fb85bc-da4e-494b-be4f-b31fe3814100" ["content-type"]=> string(26) "application/x-amz-json-1.1" ["content-length"]=> string(3) "182" ["date"]=> string(29) "Tue, 19 Jun 2018 12:28:50 GMT" } ["transferStats"]=> array(1) { ["http"]=> array(1) { [0]=> array(0) { } } } } } Exit

使用单个php文件.

所以问题是如何在Yii 1中修​​复它,以及为什么要将IAM角色名称视为Class文件?

So question is how to fix it in Yii 1 and why its considering IAM Role Name as Class file?

推荐答案

由于@javierfdezg,我得以解决此问题.

I was able to fix this out, Thanks to @javierfdezg.

因此,基本上,Yii的自动加载器和AWS的自动加载器发生冲突,并且可能是由于Yii认为类名必须与文件名匹配所致.

So basically, Yii's auto loader and AWS's auto loader was got conflicted and may be due to Yii's assumption that class names must match file names.

因此,首先我已取消注册Yii的自动加载程序,然后在api调用完成后再次对其进行注册.

So first i have unregistered the Yii's auto load then after the api call is finished registered it again.

class ExampleController extends Controller
{
    public function init()
    {
        /* Unregister  YiiBase */
        spl_autoload_unregister(array('YiiBase', 'autoload'));
        require_once dirname(dirname(__FILE__)) . '/extensions/awsv3/vendor/autoload.php';
        $config = array(
                'version' => 'latest',
                'region' => 'us-west-2',
        );
        $s3_instance = new \Aws\Ssm\SsmClient($config);
        $result = $s3_instance->getParameters([
            'Names' => array('host_name'),
            'WithDecryption' => true
        ]);

        /* Register  YiiBase */
        spl_autoload_register(array('YiiBase', 'autoload'));


        $keys = $result->toArray();
        var_dump($keys);
        exit("Exit");
    }
}

这篇关于IAM角色名称在Yii 1中被视为班级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆