Composer とは
PHPのパッケージ管理システムです。
詳しくはこちらの記事がわかりやすいです。
https://qiita.com/atwata/items/d6f1cf95ce96ebe58010
Composer本家サイト
https://getcomposer.org/
composer diagnose とは
ざっくり説明すると診断用コマンドです。
https://getcomposer.org/doc/03-cli.md#diagnose
環境
Windows7 Professional SP1
経緯
ちょっと別件で必要になったので手元のパソコンに composer をインストールしました。
その後、composer diagnose
コマンドを composer のインストール確認として実行してみたところ下記のようなメッセージが出力されました。
$ composer diagnose
Checking composer.json: WARNING
No license specified, it is recommended to do so. For closed-source software you may use "proprietary" as license.
Checking platform settings: WARNING
The OpenSSL library (0.9.8zb) used by PHP does not support TLSv1.2 or TLSv1.1.
If possible you should upgrade OpenSSL to version 1.0.1 or above.
Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking github.com rate limit: FAIL
[Composer\Downloader\TransportException] The "https://api.github.com/rate_limit" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Failed to enable crypto
failed to open stream: operation failed
Checking disk free space: OK
Checking pubkeys:
Tags Public Key Fingerprint: ******* ******** ********
Dev Public Key Fingerprint: ******* ******** ********
OK
Checking composer version: OK
Composer version: 1.7.2
PHP version: 5.3.29
エラー抜粋
The OpenSSL library (0.9.8zb) used by PHP does not support TLSv1.2 or TLSv1.1.
If possible you should upgrade OpenSSL to version 1.0.1 or above.
(省略)
[Composer\Downloader\TransportException] The "https://api.github.com/rate_limit" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Failed to enable crypto
failed to open stream: operation failed
原因
2018年2月以降、github.com, api.github.com への接続が TLSv1/ TLSv1.1 ではできなくなったらしいです。
https://blog.github.com/2018-02-02-weak-cryptographic-standards-removal-notice/
なので https://api.github.com/rate_limit
からファイルのダウンロードができんよ!って怒られているものと思われます。
OpenSSLのバージョンが古いのかな?
と思ったので確認してみます。
$ openssl version
OpenSSL 1.0.2o 27 Mar 2018
OpenSSL のバージョンは足りているようです。The OpenSSL library (0.9.8zb) used by PHP
ってエラーに書いてあるので PHP が使っている openssl のバイナリが古いって話ですかね、もしかして。
PHP のバージョン
コマンド打つまでもなく composer diagnose
時のメッセージの最後に既にPHPのバージョンが出力されてました。
PHP version: 5.3.29
まさかの 5.3w
特に 5.3 にこだわっているわけではないのでこの際PHPのバージョンを上げてみることにします。
古いPHPのアンインストール
まず 5.3.29 の PHP はアンインストールします。
当方の環境ではインストーラで入れていたので、 コントロール パネル > すべてのコントロール パネル項目 > プログラムと機能
からphp-5.3.29 をアンインストールしてサクッと終わりました。
なお、万が一 5.3.29 の環境を復活させたい場合は
こちらから php-5.3.29-win32-VC9-x86.msi をダウンロードして実行すれば可能です。
https://windows.php.net/downloads/releases/archives/
新しいPHPのインストール
世間では既に7系がリリースされていますが、ローカルのPHPは一応まだ5系にしておきたかったのでひとまず5.6を入れてみることします。
こちらから VC11 x64 Thread Safe の zip をダウンロードしました。
https://windows.php.net/download#php-5.6
当方の端末の場合はCドライブ直下に解凍し、システム環境変数にパスを通しました。
php -v
コマンドで確認したところ、うまくいってました。
$ php -v
PHP 5.6.37 (cli) (built: Jul 19 2018 18:17:53)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
php.ini の準備
phpのインストールはできたので拡張機能の設定を行います。
php.ini-production をコピーして、php.ini にリネームします。
php.ini を編集してまず extension_dir の指定を行います。
パスはphpの場所に合わせて変更してください。
extension_dir = "C:\php-5.6.37\ext"
次に php_openssl.dll のコメントを解除して有効化します。
extension=php_openssl.dll
これから composer を実際に使う上で必要になると思われるので curl もついでにコメント解除して有効化しておきます。
extension=php_curl.dll
ちなみに
php.ini を設定しないと composer diagnose
でこんなエラーが出ます。(出ました)
$ composer diagnose
[Composer\Exception\NoSslException]
The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable this error, at your own risk, by setting
the 'disable-tls' option to true.
再度 composer diagnose 実行
$ composer diagnose
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking pubkeys:
Tags Public Key Fingerprint: ******* ******** ********
Dev Public Key Fingerprint: ******* ******** ********
OK
Checking composer version: OK
Composer version: 1.7.2
PHP version: 5.6.37
PHP binary path: C:\php-5.6.37\php.exe
ようやくうまく動いてくれました。ということはやはりPHPのバージョンの問題だったということですかね。
なんとなく php 5.6.37 のフォルダから php_openssl.dll
だけ持ってくれば5.3のままでも動きそう?な気はしますがなんとも言えないです。変なバグが出ても困るのでこれでよしとします。
残された疑問
あれ、ということは Composer は事実上動作要件が 5.3 では足りないってことなんですかね。
公式では PHP 5.3.2 以上推奨 とされていますが、どうなんでしょう。
もしかしたら Windows に限った話かもしれないのでまだ断定はできないですね。これはまた別の機会にちょっと検証してみたいなと思います。