composerがproxy関係でコケるときの対処方法

プロキシ環境下で新しく開発環境構築するときに、いつもcomposer関連で調べる羽目になってつらみなのでメモ。windows7です。

composer.phar取得

curl -S http://getcomposer.org/installer | php 

Sオプションはエラーメッセージを表示するだけなので無くても大丈夫。

ここでタイムアウトする場合、OSの環境変数
変数名:HTTP_PROXY
値:http://<プロキシサーバ名>:<port>
を設定すればOK。(linuxだったら~/.bashrcにexport HTTP_PROXY=http://:とかすればきっと行ける気がする。)ついでにHTTPS_PROXYも同じ値で設定しておくと吉

プロキシサーバ名とかポートがわからんというときはIEのツール→接続タブ→LANの設定のプロキシサーバのところに書いてあったりなかったりします。認証付きだとhttp://<ユーザID>:<パスワード>@:かもしれない。

設定したら環境変数の適用のために一度コマンドプロンプトを閉じて、もう一度開く。その後、

$ curl -S http://getcomposer.org/installer | php 

とすればめでたくcomposer.pharをgetできるはずです。*1

パッケージの取得

環境変数が設定できればプロキシも越えられて大満足魔神かと思いきや、ときたまzipballなんちゃらでこけたりします。

例:

 [Composer\Downloader\TransportException]
 The "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e9168
 49d48e3a51d5f5e278b" file could not be downloaded (HTTP/1.0 400 Bad Request)

こちらの記述によると環境変数
変数名:HTTP_PROXY_REQUEST_FULLURI
(またはHTTPS_PROXY_REQUEST_FULLURI)
値:false
を追加すれば良いらしい。ということで設定後、

$ php composer.phar install

とすればめでたくインストールできました。

余談ですが、composerの公式サイトにちゃんと色々書いてあるのに今更気が付きました。キャッシュ消したいと思った時も、キャッシュディレクトリがデフォルトでどこに設定されるかなど細かく書いてあったし、composer関係でつまったらまず公式読もう(結論)

*1:The openssl extension is missing, which will reduce the security and stability of Composer.If possible you should enable it or recompile php with --with-opensslとか言われたらphp.iniのextension=php_openssl.dllを有効にしましょう。