または「AWS SDK for PHPでPHPバージョン8.1未満はサポートしない件」。
ErrorException (E USER DEPREGATED)
This installation of the SDK is using
PHP version 7.3.13, which will be deprecated on January 13th, 2025
Please upgrade your PH version to a minimum of 8.1. to continue receiving updates for the AWS SDK for PHP. To disable this warning, set suppress_php_deprecation_warning to true on the client constructor or set the environment variable
AWS_ SUPPRESS_PH DEPRECATI
ON_WARNING to true. More information can be found at:
https://aws.amazon.com/blogs/deve
loper/announcing-the-end-of-support-for-php-runtimes-8-0-x-and-below-in-the-aws-sdk-for-php/
表題の通りなのですが、Laravel 6 / PHP 7 で AWS の DynamoDB および AWS SDK for PHP v3 を使おうとしたら上記のようなエラーになりました。スクリーンショットだと以下。
Google翻訳にかけてみるとこんなことを言われています。
ErrorException (E USER DEPREGATED)
この SDK のインストールでは、PHP バージョン 7.3.13 を使用しています。このバージョンは、2025 年 1 月 13 日に廃止されます。PHP バージョンを 8.1 以上にアップグレードして、AWS SDK for PHP の更新を引き続き受信してください。この警告を無効にするには、クライアント コンストラクターで suppress_php_deprecation_warning を true に設定するか、環境変数 AWS_ SUPPRESS_PH DEPRECATION_WARNING を true に設定します。詳細については、次のサイトを参照してください:
https://aws.amazon.com/blogs/developer/announcing-the-end-of-support-for-php-runtimes-8-0-x-and-below-in-the-aws-sdk-for-php/
要するに自分の環境でPHPバージョン7.3を使っており、AWS SDK for PHPではそのバージョンをサポートしなくなるため出ているエラー(警告)です。PHPバージョンを8.1以上にすれば良いのですが、諸事情あり取り急ぎバージョンは変えずにこの警告を消す、ということをやっておきます。
以下のいずれかをやれば良さそうです。
クライアントコンストラクターで suppress_php_deprecation_warning を true に設定
環境変数 AWS_ SUPPRESS_PHDEPRECATION_WARNING を true に設定
「suppress_php_deprecation_warning」とは ”PHPの非推奨の警告を抑制する” という意味合いです。
それでは両方見ていきます。
クライアントコンストラクターで suppress_php_deprecation_warning を true に設定
use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\UrlGenerator;
use Aws\DynamoDb\SessionHandler;
use Aws\DynamoDb\DynamoDbClient;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot(UrlGenerator $url)
{
$dynamoDb = new DynamoDbClient([
'region'=>'ap-northeast-1',
'suppress_php_deprecation_warning' => true, // ←ここ
]);
$sessionHandler = SessionHandler::fromClient($dynamoDb, [
'table_name' => 'sessions',
'hash_key' => 'id',
]);
Session::extend('dynamodb', function ($app) use ($handler) {
return $handler;
});
}
}
例えばこんな感じに今回であれば、SDKを使いDynamoDBのクライアントをインスタンス化するときに 'suppress_php_deprecation_warning' => true
をオプションとして渡してあげれば大丈夫です。
環境変数 AWS_ SUPPRESS_PHDEPRECATION_WARNING を true に設定
〜中略〜
SESSION_DRIVER=dynamodb
DYNAMODB_SESSION_TABLE=sessions
DYNAMODB_VERSION=latest
AWS_SUPPRESS_PHP_DEPRECATION_WARNING=true # ←ここ
こんな感じで、.env
ファイルに AWS_SUPPRESS_PHP_DEPRECATION_WARNING=true
を記載すれば大丈夫です。
両者の使い分けとしては、クライアントごと個別に設定するか、envファイルで環境に設定する場合はサービス全体に適用できかつ本番環境と検証環境では異なる設定にするなどもできる、といった感じでしょうか。
環境による差異をなくしたかったのと、今回の対応は暫定的なものだったので、クライアントに対してのみ警告抑制をするようコンストラクタでの抑制を選択しました。
良い子の皆さんはLaravelもPHPも最新版を使うようにしてくださいね。
以下AWSからのお知らせ
Starting January 13, 2025, the AWS SDK for PHP will no longer support PHP 8.0.x, which reached end-of-life on November 26, 2023. Additionally, we will no longer support PHP 7.2.x, 7.3.x, and 7.4.x, which reached end-of-life November 2020, November 2021, and November 2022, respectively.
2025 年 1 月 13 日以降、AWS SDK for PHP は、2023 年 11 月 26 日にサポートが終了した PHP 8.0.x をサポートしなくなります。また、2020 年 11 月、2021 年 11 月、2022 年 11 月にそれぞれサポートが終了した PHP 7.2.x、7.3.x、7.4.x もサポートされなくなります。
参考URL
AWS SDK for PHP バージョン 3 での DynamoDB セッションハンドラーの使用
Announcing the end-of-support for PHP runtimes 8.0.x and below in the AWS SDK for PHP
aws SDK for PHP 3.x API Reference
Laravelの全バージョンのリリース日とセキュリティ&バグ修正タイムライン