<http://j-caw.co.jp/blog/?p=1100>

上記のURLを参考にして、S3へのファイルアップロードを構築しようと考えていますが、以下のようなエラーが出てしまいます。  
これは何が原因でしょうか？？

Fatal error: Uncaught exception 'InvalidArgumentException' with message
'Missing required client configuration options: version: (string) A "version"
configuration value is required. Specifying a version constraint ensures that
your code will not be affected by a breaking change made to the service. For
example, when using Amazon S3, you can lock your API version to "2006-03-01".
Your build of the SDK has the following version(s) of "s3": * "2006-03-01" You
may provide "latest" to the "version" configuration value to utilize the most
recent available API version that your client's API provider can find. Note:
Using 'latest' in a production application is not recommended. A list of
available API versions can be found on each client's API documentation page:
<http://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html>. If you are unable
to load a specific API version, then you may need to update your copy of the
SDK.' in phar:///home/for815/www/admin/s3/aws.phar/Aws/ClientResolver.php:328
Sta in phar:///home/for815/www/admin/s3/aws.phar/Aws/ClientResolver.php on
line 328
CC BY-SA 3.0
2015-12-11T08:25:11.727
19872
2016-03-10T14:56:08.250
2015-12-11T10:09:42.937
8000
8619
question
php aws amazon-s3
S3へファイルアップロードしようとすると Missing required client configuration options: version
```

    Fatal error: Uncaught exception 'FooException' with message 'yyy' in ...
    
```

上記のような形式のエラーは、`FooException`
という[例外](http://php.net/manual/ja/language.exceptions.php)が発生したが、try..catchブロックで処理されなかった、ということを表します。重要なのは
`with message 'yyy'` の部分で、多くの場合ここに例外となった理由が記述されています。

今回の場合 `Missing required client configuration options: version: (string) A
"version" configuration value is required. (略)` とあり、`version`
というオプションが指定されていない、と書かれています。

で、AWS SDK for PHP は[今年の5月](https://github.com/aws/aws-sdk-
php/releases/tag/3.0.0)に v3 がリリースされ、現在公式サイトからダウンロードできるのはこちらなのですが、その際に
`version` と `region` オプションが必須になったようです。参考にされたサイトは AWS SDK v2 の頃に書かれた記事なのでしょう。

> When instantiating a client for any service, you must specify the 'region'
> and 'version' options. In version 2 of the SDK, 'version' was completely
> optional, and 'region' was sometimes optional. In version 3, both are always
> required. Being explicit about both of these options allows you to lock into
> the API version and region you are coding against. When new API versions are
> created or new regions become available, you will be isolated from
> potentially breaking changes until you are ready to explicitly update your
> configuration.  
>  \--- <http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/migration.html>
> より引用

APIは将来的に仕様が変わることがありますが、その場合でも version と region
を明示していれば、知らぬ間に挙動が変わって問題になるということを避けられるから、ということのようですね。

ですから選択肢は以下のどちらかになるかと思います。

  * AWS SDK v2 を入手する  
いつまでサポートされているのかは確認していませんが、とりあえず以下のURLからダウンロードできるようです。もしくはComposerでバージョン指定するか。  
<https://github.com/aws/aws-sdk-php/releases/tag/2.8.24>

  * AWS SDK v3 に移行する  
ただし `factory` が非推奨になっていたり、`key` `secret` オプションが `credentials`
の中に移動しているなど、いくつか変更が必要です。どちらも英語ですが、[Migration
Guide](http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/migration.html)
、もしくは v3 の [Getting Started](http://docs.aws.amazon.com/aws-sdk-
php/v3/guide/getting-started/basic-usage.html) を読んだ方が早いかもしれません。

参考

  * [Basic SDK Usage — AWS SDK for PHP documentation](http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html)
  * [Migration Guide — AWS SDK for PHP documentation](http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/migration.html)
  * [AWS SDK for PHPのVersion 3に更新して、EC2自動起動処理を書き換えてみた - Qiita](http://qiita.com/shojimotio/items/38497ed4e826d772e583)
CC BY-SA 3.0
2015-12-11T13:42:50.667
19889
2015-12-11T13:42:50.667
8000
19872
answer