カテゴリー : pear

このカテゴリーの登録数:16件 表示 : 1 - 10 / 16

2007/01/28

PEAR::Services_Lingr

ポスト @ 19:50:56 | ,     

仕事はぇぇぇp4lifeのメモ - Lingr API の PHP ライブラリ,PEAR::Services_Lingr ができました

俺もやろっかな。と思ったら既にあるってなんちゅう敗北感!!(勘違い

2005/12/09

Phing用 PHP Archive(phar) タスク作った。

ポスト @ 3:17:13 , 修正 @ 2005/12/09 3:21:41 | , ,     

なんか 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

気になる

ポスト @ 3:54:27 | ,     

Proposalから面白そうなものがでてる。
ref - PEAR :: PEPr :: Details :: AOP Library for PHP

ソースはおいしくいただきました。今後に期待です。

2005/10/11

PEAR マニュアルを cron で更新

ポスト @ 1:33:05 , 修正 @ 2005/10/11 23:59:45 | ,     

自分トコに置いてある 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

ポスト @ 1:07:40 , 修正 @ 2005/08/01 1:19:22 | ,     

まだアレは製作途中だけど、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

ポスト @ 22:48:20 , 修正 @ 2005/06/29 22:57:11 | , , ,     

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);

何故か一度$parray_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にしてみる

ポスト @ 0:28:57 , 修正 @ 2005/05/15 19:51:25 | , ,     

最近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も加えるとファイルリストはこんな感じに

川o・-・)<2nd life - bookmarkletの文字数制限を無くすという事で(意味不明)Javascriptをpharアーカイブして圧縮。
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)

高橋メソッドのファイル群は

なんか、質問とか物申す!ってのがあったら、コメント下さい...

ref - Docs for page Creator.php

2005/05/09

Pear::XML_sql2xmlの和訳してみたよ。

ポスト @ 22:00:53 , 修正 @ 2005/05/09 22:12:57 | , , ,     

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

ポスト @ 0:52:39 , 修正 @ 2005/04/20 1:16:51 | , ,     

最近噂によく聞く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(最新の)版PHP_Archiveの落とし方は

cvs -d :pserver:cvsread@cvs.php.net:/repository checkout pear/PHP_Archive

こんな感じ

2005/04/17

サイドバーでdel.icio.us

ポスト @ 5:05:47 , 修正 @ 2005/04/17 5:21:52 | , ,     

前回ブックマークを管理するツールが欲しいなぁ。と思って探していたら
PearにServices_Deliciousなんてものがあった。

んで、サイドバーで使えるようにしてみた。(Exampleを見ながら)
20分ぐらいで完成した。

delicious-1.0.tar.gz

解凍してから変更する場所は
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ぐらいは使いものになるようにしたいな。