SOFTELメモ

Softel Inc.

【php】PEARをインストールする(Pyrusで)

問題

PEARって、サーバー単位で1つ、/usr/share/pear みたいなところにしかインストールできないの?

各プロジェクトのベンダー用ディレクトリに設置したり、システムごとに必要なものだけ持たせたりしたいんだけど。

php-logo

答え

Pyrus(新しい方のPEARインストーラー)でなら簡単。

自分のプロジェクトのライブラリ用ディレクトリに入れたり、フレームワークのvendorディレクトリに入れたりできる。もちろん、みんなで共用できるようにサーバー単位で1つインストールすることもできる。

1. pyrus.pharダウンロード

10MBぐらいある。どこにあってもかまわないので、好きなところに。

$ wget http://pear2.php.net/pyrus.phar

2. 初期設定

初めてinstallを実行すると、初期設定するか?と聞かれる。

設定は自分のホームディレクトリに ~/.pear/pearconfig.xml で保存される。

$ php pyrus.phar install
Pyrus version 2.0.0a4 SHA-1: 72271D92C3AA1FA96DF9606CD538868544609A52
Pyrus: No user configuration file detected
It appears you have not used Pyrus before, welcome!  Initialize install?
Please choose:
  yes
  no
[yes] : (←yesでよいのでそのままEnter)
Great.  We will store your configuration in:
  /home/ec2-user/.pear/pearconfig.xml
Where would you like to install packages by default?
[/home/ec2-user] : /tmp/myProject/lib (←あくまでもデフォルトの場所なのでどこでもよいけど、開発中のプロジェクトがあればそこにしておくとよいでしょう。)
You have chosen:
/tmp/myProject/lib
Thank you, enjoy using Pyrus
(......以下略......)

設定の確認は getコマンドで。

$ php /tmp/pyrus.phar get
Pyrus version 2.0.0a4 SHA-1: 72271D92C3AA1FA96DF9606CD538868544609A52
Using PEAR installation found at /tmp/myProject/lib
System paths:
  php_dir => /tmp/myProject/lib/php
  ext_dir => /usr/lib64/php/modules
  cfg_dir => /tmp/myProject/lib/cfg
  doc_dir => /tmp/myProject/lib/docs
  bin_dir => /usr/bin
  data_dir => /tmp/myProject/lib/data
  www_dir => /tmp/myProject/lib/www
  test_dir => /tmp/myProject/lib/tests
  src_dir => /tmp/myProject/lib/src
  php_bin => /usr/bin/php
  php_ini => /etc/php.ini
  php_prefix =>
(......以下略......)

バイナリの設置場所 bin_dir/usr/bin となっているので、これもプロジェクト内になるように変えることができる。

設定をするのは setコマンドで。

$ php pyrus.phar set bin_dir /tmp/myProject/lib/bin

3. PEARインストール

PEARのコアのPEARのインストールなら、

$ php pyrus.phar install pear/PEAR

アンインストールは、

$ php pyrus.phar uninstall pear/PEAR

依存関係は自動的に解決してくれる。必要なものがなければ一緒に取ってきてくれる。

$ php pyrus.phar install pear/Services_ReCaptcha
Pyrus version 2.0.0a4 SHA-1: 72271D92C3AA1FA96DF9606CD538868544609A52
Using PEAR installation found at /tmp/myProject/lib
Downloading pear.php.net/Services_ReCaptcha
Mime-type: application/octet-stream
Downloading pear.php.net/HTTP_Request2===============================================================>] 100% (10/10 kb)
Mime-type: application/octet-stream
Downloading pear.php.net/Net_URL2====================================================================>] 100% (96/96 kb)
Mime-type: application/octet-stream
Downloading pear.php.net/PEAR========================================================================>] 100% (11/11 kb)
Mime-type: application/octet-stream
Installed pear.php.net/Services_ReCaptcha-1.0.3======================================================>] 100% (289/289 kb) ← 頼んだもの
Installed pear.php.net/HTTP_Request2-2.1.1 ← 頼んでないけど取ってきてくれた
Installed pear.php.net/Net_URL2-2.0.0 ← 頼んでないけど取ってきてくれた
Installed pear.php.net/PEAR-1.9.4 ← 頼んでないけど取ってきてくれた

4. 使うとき

include_pathが通っていないところにPEARがあるので、include_pathを自家用PEARに合わせる。

<?php
set_include_path('/tmp/myProject/lib/php');
require_once 'HTTP/Request2.php';
$request2 = new HTTP_Request2();
//......以下略......

5. さらに他のものもインストール

PEARチャンネルに対応しているパッケージなら、同じようにインストールできる。

例えば、PHPUnitのインストールなら、

$ php pyrus.phar set auto_discover on
$ php pyrus.phar channel-discover pear.phpunit.de
$ php pyrus.phar install phpunit/PHPUnit

確認すると、ファイルが増えている。

$ ls /tmp/myProject/lib/bin/
pear  peardev  pecl  phpunit
$ ls /tmp/myProject/lib/php/PHPUnit/
Autoload.php  Extensions  Framework  Runner  TextUI  Util

6. さらに他のプロジェクトにも対応

新たにプロジェクトmyProject2が始まって、/tmp/myProject2で開発、/tmp/myProject2/appにソースが合って、/tmp/myProject2/app/vendor がベンダー用ディレクトリだとしたら、

設定もプロジェクトごとにできるので、以下のように設定しておいてから、

$ php pyrus.phar /tmp/myProject2/app/vendor set bin_dir /tmp/myProject2/app/vendor/bin

PEARをインストールする。

$ php /tmp/pyrus.phar /tmp/myProject2/app/vendor install pear/PEAR

関連するメモ

コメント