事象
XServerにてLaravelのSchedule:runをcronすると、下記のようなエラーが発報してうまく動作しない不具合が発生しました。
エラー内容
production.ERROR: Undefined constant "CURL_SSLVERSION_TLSv1_2" {"exception":"[object] (Error(code: 0): Undefined constant \"CURL_SSLVERSION_TLSv1_2\" at
どうやら、CURL_SSLVERSION_TLSv1_2という定数が未定義であるためにエラーが発生しているようです。
原因
本エラー発生する原因はいくつかあると思いますが、今回のケースは、
cURLのバージョンが古いことが原因でした。
PHP 5.5.19 以降 で CURL_SSLVERSION_TLSv1_2
が定義されるため
PHPのバージョンが古いか、cURLのバージョンが7.34.0未満のときに未定義とエラーが出ます。
PHPのバージョンが古いときは、CLIのバージョンを変更します。
XServerは、ドメインごとにPHPのバージョンを選択できますが、CLIのバージョンは、SSHで接続してパスを通してあげる必要があります。
以下に、パス指定の方法を記載しています。
CURL
に関しては、管理者権限が無くてもできるような記事もあるにはありましたが、管理の手間が増えてしまうのであまりイレギュラーなことはしたくありません。
そもそも、CURL_SSLVERSION_TLSv1_2 の未定義エラーが発生した理由
LaravelのScheduleの内部でHttp:Getを使用していました。
Laravelでは、GuzzleというHTTPクライアントを使用しており、Laravelの7系以降の場合、デフォルトでTLS1.2が使用されるため、そもそもcURLのバージョン的に対応しておらずエラーが発生していました。
TLS1.2以上を必須としているAPIも多く、セキュリティ要件としては、暫定的な対応もしたくありません。
解決
タイトル通り、Xserver環境上での解決方法です。
そもそも、旧サーバー環境(サーバー番号がsv1~sv16000.xserver.jp)だったためcURLのバージョンも古かったのです。
Xserverを新サーバに移行することでcURLのバージョンも上がり問題なく使用できるようになりました。
実際の移行感を記した記事は以下になります。
以上
コメント