当我将AWS配置文件与服务构建器一起使用时,我得到Undefined变量

时间:2015-02-23 15:21:02

标签: php amazon-web-services amazon-s3

我尝试将此PHP框架https://github.com/panique/mini与Amazon S3:s配置文件与服务构建器http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html#using-a-configuration-file-with-the-service-builder

集成

如果我能将它与现有的config.php https://github.com/panique/mini/blob/master/application/config/config.php集成,那将是最好的,但我不知道该如何处理这一行。

$aws = Aws::factory('/path/to/custom/config.php');

因为我已经在代码的另一部分中包含了config.php

这是我尝试的但不知道为什么它不起作用

在文件夹config中创建了一个新文件aws-config.php,并将其包含在我的项目中。 aws-config.php具有以下代码(使用正确的密钥)。

return array(
    // Bootstrap the configuration file with AWS specific features
    'includes' => array('_aws'),
    'services' => array(
        // All AWS clients extend from 'default_settings'. Here we are
        // overriding 'default_settings' with our default credentials and
        // providing a default region setting.
        'default_settings' => array(
            'params' => array(
                array(
                    'credentials' => array(
                        'key'    => 'YOUR_AWS_ACCESS_KEY_ID',
                        'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY',
                    )
                ),
                'region' => 'us-west-1'
            )
        )
    )
);

我想在我的控制器中访问我的凭据,如下所示:https://github.com/panique/mini/blob/master/application/controller/songs.php

我已从文档

中实现了这一点
<?php
use Aws\S3\S3Client;
use Aws\Common\Aws;

// Create the AWS service builder, providing the path to the config file
$aws = Aws::factory(APP . 'config/aws-config.php');
$client = $aws->get('s3');

class Album extends Controller
{
    public function index()
    {
            foreach ($images as &$image) {
                $image->imageThumbnailUrl = $client->getObjectUrl($resizedBucket, 'resized-'.$image->image_name, '+10 minutes');

            }
...
...

我收到错误消息

  

注意:未定义的变量:致命错误的客户端:呼叫成员   函数getObjectUrl()在

中的非对象上

我在循环中使用$ client和getObjectUrl。

如果我使用&#34;将凭据传递到客户端工厂方法&#34;我的代码工作正常。我的控制器中的索引方法中的http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html#passing-credentials-into-a-client-factory-method

1 个答案:

答案 0 :(得分:0)

此处的问题与AWS SDK或panique / mini框架无关。您不能在类定义之外声明变量,并期望能够在类定义中使用它们。这就是变量作用域在PHP中的工作原理。您需要以某种方式将s3Client对象传递给Controller,或者在控制器内实例化它。

你可以逐字地将这些行移动到你的索引方法中,它应该可以工作。

// Create the AWS service builder, providing the path to the config file
$aws = Aws::factory(APP . 'config/aws-config.php');
$client = $aws->get('s3');