CodeIgniterからPEARを使えるようにする

CodeIgniterからPEARを使えるようにする

CodeIgniterからPEAR::Crypt_Blowfishを使いたい、ということでできるようにしてみました。
手順は以下↓
http://codeigniter.com/wiki/PEAR_integration/

以下消えた時用のログ。
PEAR integration

This is a tutorial how to integrate PEAR into Codeigniter by Fabian Wesner (german specialist for codeigniter )
What is PEAR?

PEAR is short for “PHP Extension and Application Repository” and is pronounced just like the fruit. The purpose of PEAR is to provide:

* A structured library of open-source code for PHP users

* A system for code distribution and package maintenance

* A standard style for code written in PHP, specified here

* The PHP Extension Community Library (PECL), see more below

* A web site, mailing lists and download mirrors to support the PHP/PEAR community

PEAR is a community-driven project governed by its developers. PEAR’s governing bodies are subdivided into the PEAR Group, Collectives, and a President. PEAR’s constitution (adopted in March 2007) defining these groups is documented here. The PEAR project was founded in 1999 by Stig S. Bakken and quite a lot of people have joined the project.

http://pear.php.net
PEAR and Codeigniter

1. Preparation
To use some of PEARs Libraries in Codeigniter you need to create a new folder.
system/application/pear

You must copy the PEAR.php to this directory.
system/application/pear/PEAR.php

Then you copy some more PEAR-Directories and Classes. Pay attention to dependencies!
Example:
system/application/pear/HTTP/Request.php
system/application/pear/Net/Socket.php
system/application/pear/Net/URL.php

2. Enable Hooks
Note: the purpose of the hook is to set the include path to include the path to PEAR. As an alternative to a hook, you could put the same ini_set() function in your config.php file or the main CI index.php file.

You need to enable hooks inside the config.php:
$config['enable_hooks'] = TRUE;

Open hooks.php and add a hook:
$hook['pre_controller'][] = array(
'class' => 'Pear_hook',
'function' => 'index',
'filename' => 'pear_hook.php',
'filepath' => 'hooks'
);

Then create a new file called pear_hook.php:
system/application/hooks/pear_hook.php


3. Use It!
create a library called PearLoader.
system/application/libraries/Pearloader.php

Pearloader.php:


Thats it!

You can use the Pearloader in a codeigniter style. Load the Library and call
$this->pearloader->load(’Packagename’,’Classname’);

The example performes a HTTP_REQUEST to yahoo:
function example(){
$url = 'http://www.yahoo.com';
$this->load->library('pearloader');
$http_request = $this->pearloader->load('HTTP','Request');
$http_request->setURL($url);
$http_request->sendRequest();
echo $http_request->getResponseBody();
}

見事に英語。
まぁ軽く読んでみました。激不安だったけど。
一通りさーっと読んでみて、何とか理解できることが判明。
意外とやさしい英語で書いてあった。。。よかった。。。
で、そもそもPEARディレクトリコピーしろとか言ってるけど、PEARってインストールするもの?
そもそもPEARどうなってるのよ?という疑問が。
以前生PHP書いたけど、PEAR使わなかったからね!(ぇ
で、調べてみるとPEARはインストールするものだとか。
で、デフォで入ってないライブラリは各々入れなきゃいけないらしい。へー。
…それいいが、↑の説明はPEARとか使うライブラリがインストールされてる前提で話してるの?ぇそうなの??
prototype.jsみたいに読み込めばOKとかではないの??
本気でよくわからなかったので、Crypt_Blowfishのrpmを実際に落としてきて中身見てみました。
フォルダ構成見てみたら、なんかわかるんじゃないかと思って。
Crypt_Blowfish-1.1.0RC2\Crypt_Blowfish-1.1.0RC2
この下にBlowfishディレクトリがあって、コピーする対象これ?って思ったけど自信ない…
そもそもBlowfishディレクトリの下結構たくさんファイルあるし。
英語のやり方みてるとどうやらBlowfish.php的なのがBlowfishディレクトリの下にあるようなことを示唆してるし。。。
とりあえずBlowfish.phpを実際見てみた。
Crypt_Blowfish-1.1.0RC2\Crypt_Blowfish-1.1.0RC2\Blowfish.php
↑の最初の方に
/**
* Required PEAR package(s)
*/
require_once 'PEAR.php';
なんて書いてあるのを発見。
なんか読み込んでる。。。
で、とりあえずPEARのそもそもの使い方をぐぐる
すると使うにはやっぱりインストールが必要なのだそうで。
その他使いたいライブラリはまた各々入れるらしい。
そしてPHPを入れるとPEARがデフォで入っているような事がちらほら。。
あるのか?と思って試しにこんなことをしてみた。
find / -name 'pear'
するとなんかずらずらとそれらしいディレクトリが出てきた。。
本当にインストールされているのか調べてみた。(最初からそうすればよいのに。。
pear list -a

Installed packages, channel __uri:
==================================
(no packages installed)
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.2 stable
Console_Getopt 1.2.3 stable
HTTP_Request 1.4.4 stable
Net_Socket 1.0.9 stable
Net_URL 1.0.15 stable
PEAR 1.7.2 stable
Structures_Graph 1.0.2 stable
Installed packages, channel pecl.php.net:
=========================================
(no packages installed)

ぉお。なんか出た。
ってことで、これでPEAEは入れなくてよさそう。
今度は使いたいCrypt_Blowfish。
pear listの結果にはそれらしき名前がないのでたぶん入れないといかんのだろうなぁ。。
ということで入れてみた。

pear install Crypt_Blowfish

install ok:って最後に出たし、画面にエラーっぽい表示もないようなので多分入った。

ということで、実際に英語の通りに作業進めてみる。
ディレクトリ作って、そこにPEAR.phpをコピー。
それどこにあるの?ということでfind。
sudo find / -name 'PEAR.php'
ってやると、なんか二つくらい該当するファイルが出てきた…
とりあえずカンで↓のをコピー。

cp /usr/share/pear/PEAR.php application/pear/

で、実際にapplication/pear/にそのCrypt_Blowfishディレクトリをコピーしたいのだが、そいつはどこにいるの・・・?
インストール、はいいけどどこに何をおかれたのかがわからんのでコピーするディレクトリを探さないといかん…
find / -name '*Crypt_Blowfish*'
findやってもインストールする前と結果全く一緒…
意味がわからんっ
こうなったら英語で出てるRequestを実際に入れてみて、コピーしているディレクトリを探せば、同じところにいるはずっ
ということで急遽関係ないRequestをインストール。
pear install HTTP_Request
この状態で↓を実行。
find / -name 'Request.php'

/tmp/pear/download/HTTP_Request-1.4.4/Request.php
/usr/local/lib/php/HTTP/Request.php

上はインストールする時に落としてきたrpmの解凍後だと思われ。
ということで答えは下の/usr/local/lib/php/。
Crypt_Blowfishもそこにいるはず、ということで見てみた。
ls /usr/local/lib/php/
Archive HTTP PEAR System.php doc smarty
Console Net PEAR.php build pearcmd.php test
Crypt OS Structures data peclcmd.php

なるほど…「Crypt」ってディレクトリ名だったのね…(脱力
念のためにCrypt以下も見てみた。
ls /usr/local/lib/php/Crypt/
Blowfish Blowfish.php

多分これだーー
ということでCryptディレクトリ以下をコピー。
cp -r /usr/local/lib/php/Crypt/ application/pear/

後はconfig.phpを修正して、hooks.phpに英語で書いてあるやつそのままこぴって、application/hooks/pear_hook.php作ってこれもまた英語に書いてあるコードコピって、application/libraries/Pearloader.php 作ってこれもまた英語のコードコピって、設定終了ー!

実際にCodeIgniterのコントローラーの中で↓のように使えます。

$this->load->library('pearloader');
$blowfish = $this->pearloader->load('Crypt','Blowfish', 'this is sample');
$cipher_value = $blowfish->encrypt("さんぷるー");


load('Crypt','Blowfish', 'this is sample');

Crypt:使いたいapplication/pear/以下のディレクトリ名
Blowfish:↑の中で使いたい拡張子無しのファイル名
this is sample:任意のパラメータ配列。今回はnew Crypt_Blowfish(xxx);の時に渡さないといけない初期パラメーターxxxを設定。
        これを設定してあげないと引数ないです、って怒られた…
って感じで設定してあげます。