カテゴリー : pear
このカテゴリーの登録数:16件 表示 : 1 - 10 / 16
2005/12/09
Phing用 PHP Archive(phar) タスク作った。
なんか Ariela Network::sea walker(JPRC)の方の行動が早いし、負けてられないので作ってみた。
S2Dao.PHP5(S2Container.PHP5にも)使える PHP Archive(phar) 化するタスクを作成しました。
最新のsvnリポジトリに置いています。
ref - https://www.seasar.org/svn/sandbox/s2dao.php5/trunk
websvn - /s2dao.php5/trunk
こんな感じで使う。(といってもコマンドから実行するだけですが...)
/> pear install http://phing.info/pear/phing-current.tgz // phing 入ってない人だけ
/> svn export https://www.seasar.org/svn/sandbox/s2dao.php5/trunk
/> cd trunk
/trunk> phing
Buildfile: /home/nowel/workspace/hoge/trunk/build.xml
s2dao.php5 > properties:
s2dao.php5 > prepare:
[mkdir] Created dir: /home/nowel/workspace/hoge/trunk/build
s2dao.php5 > package:
[echo] Makeing PHP Archive Files...
[echo] Create: ./build/s2dao.php5.1.0.0-beta3.phar... succeed
BUILD FINISHED
Total time: 2.7017 seconds
s2container.core.classes.php とかもこのタスクでpharを圧縮無しでやれば結構便利だと思った。
# ちなみにテストはしてない。
2005/10/30
気になる
Proposalから面白そうなものがでてる。
ref - PEAR :: PEPr :: Details :: AOP Library for PHP
ソースはおいしくいただきました。今後に期待です。
2005/10/11
PEAR マニュアルを cron で更新
自分トコに置いてある PEAR マニュアルを自動的に更新するようにしてみた。
書いたのは shell スクリプトと サーバにアップするための php スクリプト
クライアント(自宅鯖)実行用で、レンタルサーバなどにアップして使ってたら怒られます。きっと。
shell スクリプトは ~/bin/peardocco とでもして以下のように書いてみた。
#!/bin/sh
cd /home/nowel/workspace/php
cvs -d :pserver:cvsread@cvs.php.net:/repository checkout peardoc
cd peardoc
# ELF さんの助言により追加
make distclean
# この辺は適当に。
autoconf && ./configure --with-lang=ja && make
# 色づけ(でもhtmlじゃ意味ない?) ← html でも色づけは有効になるっぽい。
php colorize.php html
# ftp で html ファイルをアップするための php スクリプト
peardocup
php スクリプトも同じく ~/bin/peardocup とかして以下のように書いてみた。
#!/usr/bin/php -q
<?php
$ftp = ftp_connect("peardoc.xole.net");
ftp_pasv($ftp, true);
$docdir = "/home/nowel/workspace/php/peardoc";
if( $ftp !== false && ftp_login($ftp, "username", "password") ){
$dir = dir( $docdir . "/html" );
while( ($ent = $dir->read()) !== false){
if( $ent != "." && $ent != ".." ){
$file = $dir->path . "/" .$ent;
$ups = ftp_put($ftp, $ent, $file, FTP_ASCII);
if( $ups ){
echo "upload file: ". $file . "\n";
unlink($file);
}
}
}
$dir->close();
}
ftp_close($ftp);
?>
だいたいこんな感じ。あとは cron に登録 → 放置
unlink() 使ってるのは趣味で、特に深い意味は無いです。
あと、 ftp_nb_put() を使うと ftp_nb_continue() とかあるんで、ここら辺は必要に応じて使い分てください。
それ以外はいたってフツーの ftp 操作です。
これで、毎日PEAR マニュアルが更新されていれば正解。
# 最近 pear もパッケージ増えて、面白いのが沢山あるので、久々に翻訳再開したいと思います。
2005/08/01
PEAR Channel
まだアレは製作途中だけど、PEAR1.4から導入されたPEAR Channelをローカルで作ってみる。
via - It's official - pear.chiaraquartet.net is live - Lot 49 - Greg Beaver's blog
ふむ。さくらでやるにはローカルコピー
ref - Harukiからの平面波:乗り換え
# sourceforge.jp上でもできるのかな...
2005/06/29
PHP 5.1 Beta 2
PHP 5.1 Beta 2 Availableとなっていたので、snapshotの5.1-devからこっちに変更してみた。
つくづく思うんだけど、Pearなどの一部のバージョンと互換性が取れなくて、結局自分で書き直すケースが結構あったり。
例えば、個人的によく使うHTML_QuickFormなんかも4.3.xからバージョンを上げると修正する羽目になる代表。
php5からオブジェクトの参照周りが結構厳しくて、面倒って良く耳にするけど、僕はそうでもない。
どちらかというとPHP独特の"クセ"の方が厳しい。(いやどっちもどっちかな)
上の例(HTML_QuickForm)でいくと、QuickForm.phpの593行め辺り
HTML_QuickForm-3.2.4pl1のままのコードだと
$this->_elements[] =& $elementObject;
$this->_elementIndex[$elementName] = end(array_keys($this->_elements));
となっている部分を以下のように修正しなければならない
$this->_elements[] =& $elementObject;
$p =& array_keys($this->_elements);
$this->_elementIndex[$elementName] = end($p);
何故か一度$pにarray_keys()の参照を渡さないとend()でエラーとなる(Fatal error: Only variables can be passed by reference)
もっとスマートに
$this->_elementIndex[$elementName] = end( &array_keys($this->_elements) );
って書きたいけど、これは"Fatal error: Can't use function return value in write context"。
そして、これをレンタルサーバのPHP4.3.11と互換を持たせるためにさらに修正
$this->_elements[] =& $elementObject;
if( phpversion() >= 5 ){
$p =& array_keys($this->_elements);
$this->_elementIndex[$elementName] = end($p);
} else {
$this->_elementIndex[$elementName] = end(array_keys($this->_elements));
}
PHPに対する僕の理解度不足や、レベルの低さは否めない。
PHPのクセ(ref :X *ole.net : PHPの配列の挙動)って僕は呼んでるけど、中々慣れないものです。
特に日々JAVAJAVAやってるとついウッカリが多い(= 面倒 )
# っていうか久しぶりにブログ書いた気がする
2005/05/15
JavascriptもPharにしてみる
最近ajaxとか流行っててJavascriptの肥大化が目立っているような。そうでも無いような
Javascriptも圧縮できたらいいなぁ。ってことでpharアーカイブ(+compress)
ドキュメントを読んでいて分かった事
addFile("hoge.php","foo.php",true);
ってすることで
require ("hoge.phar");
require ("phar://foo.php");
という記述が可能になるらしい。
ついでに
addFile("hoge.php","foo/bar.php",true);
とすると
require ("phar://foo/bar.php");
とできるっぽい。
これは便利だなーってことで、ちょっとやってみることに。
大きいサイズのJavascriptが見つからなかったので、比較的サイズの大きいあれこれポップアップを試しにphar
view - http://php.xole.net/sample/popup/index.html
これは、どんなことしてるかっていうと
pharファイルに対して直接<link rel="hoge.phar" />が出来ないので(圧縮してるから)
pharファイルをrequireしてるだけの
wrapper.php
を設置。
それに対して
wrapper.php?get=style.css
して、pharアーカイブ内のstyle.cssを取りに行ってます。
転送時に、可能ならob_gzhandlerを付加してgzip転送
画像ファイル(png)もwrapper.php?get=apbanner.pngとかして転送させたりしてます。
直接Javascript自体のソースは弄ってません。(Javascriptってあまり書けないし...)
view - http://php.xole.net/sample/popup/ini.phps
spec.phpも加えるとファイルリストはこんな感じに
- http://php.xole.net/sample/popup/index.html
- http://php.xole.net/sample/popup/ArekorePopup.phar
- http://php.xole.net/sample/popup/ini.phps
- http://php.xole.net/sample/popup/wrapper.phps
- http://php.xole.net/sample/popup/spec.phps
phpからの実行なのでmod_gzip付けたりもできたり。
もしかしたら、便利かも知れない。
でも、本来ならphar使わないで(phar分だけサイズ大きくなるので)、javascript.gzをphpで展開して転送させる方がいいのかもしれない。
調子に乗ってJavascript版高橋メソッドもpharにしてみた。
view - http://php.xole.net/sample/takahashi_method/index.html
上のwrapper.phpは直接ファイルを指定しないといけなかったので、ちょっと変更
具体的には
readfile( "phar://".$_GET["get"] );
を
require_once "phar://method.".$_GET["get"];
とかにして、ini.phpで開いてるだけ
ただし、これだど、ファイル名が共通のmethod.???じゃないといけない(http://php.xole.net/sample/takahashi_method/spec.phps)
高橋メソッドのファイル群は
- http://php.xole.net/sample/takahashi_method/index.html
- http://php.xole.net/sample/takahashi_method/method.phar
- http://php.xole.net/sample/takahashi_method/wrapper.phps
- http://php.xole.net/sample/takahashi_method/ini.phps
- http://php.xole.net/sample/takahashi_method/spec.phps
なんか、質問とか物申す!ってのがあったら、コメント下さい...
2005/05/09
Pear::XML_sql2xmlの和訳してみたよ。
PearのPEAR :: Package :: XML_sql2xmlっていうやつのドキュメントを和訳してみました。
rev - XML_sql2xml
このXML_sql2xmlってのはすごく面白いpearパッケージです。
導入から読み進めてもらえれば分かりますが、簡単に言うとMySQLなどでApache Xindiceみたいなことができます。
例えば
select * from user_table
ってクエリを投げると
<root>
<result>
<row>
<id>1</id>
<name>hoge</name>
<sexual>male</sexual>
</row>
<row>
<id>2</id>
<name>foo</name>
<sexual>famale</sexual>
</row>
<row>
<id>3</id>
<name>bar</name>
<sexual>secret</sexual>
</row>
</result>
</root>
ってな感じのXMLを出してくれます。
もちろん、XindiceみたいにXPathも使えます。
ref - 導入 -- XPath を用いる
すごく便利だし、面白いパッケージなので、これの制作者じゃないけど、どんどん使ってみて欲しいです。
特にxindiceの導入が面倒とかそういう理由でXML-DBをあきらめてる方は特に。(XML-RPCとかで挫折した方も。)
# といっても、ネイティブじゃないですけどね...
僕のサーバには気が向いたら更新してるPEAR マニュアルがあるので、参考にしたい方や近くのPearマニュアルが古いという方はどうぞ。
まぁ確実にこちらのマニュアルの方が信頼性高いわけですけど。 :p
P.S.
上鍵さん。圧縮したもののファイル名間違ってすいません。
ご迷惑おかけしましたorz
あーやっとPHPに貢献できたかもー
2005/04/20
PEAR::PHP_Archive
最近噂によく聞くpharファイルを弄ってみた。
cvs.php.netからPHP_Archiveを落として、include_pathにPHP_Archiveを通してみた。
んで、とりあえずここからPEAR.pharを使ってみる。
#php PEAR.phar list
たぶん、# pear listと同じ結果が表示される。
これだけじゃ面白くないので、自分でパッケージングしてみた
pharファイルに格納したいファイルを作る
foo.php
<?php
function foo(){
if( file_exists("foo/bar.php") ){
require ("foo/bar.php");
bar_func();
} else {
echo "foooooooooooooo\n";
}
}
?>
一応もう一個
bar.php
<?php
function bar_func(){
echo "foo/bar.php!!";
}
?>
んで、pharファイルの動き(というか、include系?: initとかdocに書いてありました...)を書いたファイルを記述
index.php
<?php
// hoge.phpの savePhar() ご覧のこと。
require_once ("sage.phar");
require_once ("phar://sage.phar/foo.php");
foo();
?>
ファイルを作り終えたら、早速phar化する記述を書いたファイルを作成
hoge.php
<?php
require ("Archive.php");
require ("Archive/Creator.php");
// main.phpにinitの設定をしてもらう、圧縮を有効に
$phar = new PHP_Archive_Creator("main.php", true);
// ファイルをpharに格納 : addFile( SourcePATH, phar_file PATH )
// 注意 index.phpをmain.phpとして格納してます
$phar->addFile("index.php", "main.php");
$phar->addFile("foo.php", "foo.php");
$phar->addFile("bar.php", "foo/bar.php");
// 保存するpharファイル名
$phar->savePhar("sage.phar");
?>
とりあえず、実行
nowel@linux:~/workspace/php/test> php hoge.php
nowel@linux:~/workspace/php/test> php sage.phar
foooooooooooooo
ファイル構成などはこんな感じになってるはず。
bar.php
foo.php
hoge.php
index.php
sage.phar
注意したいのは、phar内でのbar.phpのパス
hoge.phpでbar.phpの階層を変えたが、foo.php内でfile_exists("foo/bar.php")とやっても、falseになる
正確にはfile_exists("phar://sage.phar/foo/bar.php")となるようだ。
pharは面白そうなので、今度暇な時に遊び尽くしてみよう :p
- CVS :: Source Directory of /pear/PHP_Archive
- PEAR :: Package :: PHP_Archive
- Not-too-Distant future: self-installing PEAR from a single file - Lot 49 - Greg Beaver's blog
- p0t: PEAR PHP_Archive
ちなみに、cvs(最新の)版PHP_Archiveの落とし方は
cvs -d :pserver:cvsread@cvs.php.net:/repository checkout pear/PHP_Archive
こんな感じ
2005/04/17
サイドバーでdel.icio.us
前回ブックマークを管理するツールが欲しいなぁ。と思って探していたら
PearにServices_Deliciousなんてものがあった。
んで、サイドバーで使えるようにしてみた。(Exampleを見ながら)
20分ぐらいで完成した。
解凍してから変更する場所は
config.phpの$pear_path,$username,$password,$_urlぐらい
// 設置したとこのPEARへの絶対パス
$pear_path = "/home/user/delicious/PEAR/";
// del.icio.usのログインユーザ名
$username = "username";
// del.icio.usのログインパスワード
$password = "password";
// 設置したとこのURL
$_url = "http://site/delicious/";
minimixiぐらいは使いものになるようにしたいな。

仕事はぇぇぇp4lifeのメモ - Lingr API の PHP ライブラリ,PEAR::Services_Lingr ができました
俺もやろっかな。と思ったら既にあるってなんちゅう敗北感!!(勘違い