質問: 上記の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: . 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
回答: ``` Fatal error: Uncaught exception 'FooException' with message 'yyy' in ... ``` 上記のような形式のエラーは、`FooException` という例外が発生したが、try..catchブロックで処理されなかった、ということを表します。重要なのは `with message 'yyy'` の部分で、多くの場合ここに例外となった理由が記述されています。 今回の場合 `Missing required client configuration options: version: (string) A "version" configuration value is required. (略)` とあり、`version` というオプションが指定されていない、と書かれています。 で、AWS SDK for PHP は今年の5月に 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. > > --- より引用 > > > APIは将来的に仕様が変わることがありますが、その場合でも version と region を明示していれば、知らぬ間に挙動が変わって問題になるということを避けられるから、ということのようですね。 ですから選択肢は以下のどちらかになるかと思います。 * AWS SDK v2 を入手する いつまでサポートされているのかは確認していませんが、とりあえず以下のURLからダウンロードできるようです。もしくはComposerでバージョン指定するか。 * AWS SDK v3 に移行する ただし `factory` が非推奨になっていたり、`key` `secret` オプションが `credentials` の中に移動しているなど、いくつか変更が必要です。どちらも英語ですが、Migration Guide 、もしくは v3 の Getting Started を読んだ方が早いかもしれません。 参考 * Basic SDK Usage — AWS SDK for PHP documentation * Migration Guide — AWS SDK for PHP documentation * AWS SDK for PHPのVersion 3に更新して、EC2自動起動処理を書き換えてみた - Qiita