IAM角色名称在Yii 1中被视为类

DS9*_*DS9 5 php amazon-ec2 yii amazon-web-services aws-sdk

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

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

产量

PHP警告
包括(TestRole.php):无法打开流:没有这样的文件或目录

注意:TestRole是IAM角色名称.

我在单个PHP文件中使用了相同的代码(与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");
Run Code Online (Sandbox Code Playgroud)

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)"星期二,2018年6月19日12:28:50 GMT"} ["transferStats"] => array(1) {["http"] => array(1){[0] => array(0){}}}}}退出

它使用单个php文件.

所以问题是如何在Yii 1中修​​复它以及为什么它将IAM Role Name视为类文件?

堆栈跟踪

在此输入图像描述

DS9*_*DS9 3

感谢@javierfdezg,我能够解决这个问题。

所以基本上,Yii 的自动加载器和 AWS 的自动加载器发生了冲突,可能是由于 Yii 假设类名必须与文件名匹配。

所以首先我取消注册了 Yii 的自动加载,然后在 api 调用完成后再次注册它。

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");
    }
}
Run Code Online (Sandbox Code Playgroud)