[PHP-users 16420] Re: APC Version 2.0 Released.

Youichi Iwakiri yiwakiri @ st.rim.or.jp
2003年 7月 3日 (木) 15:55:54 JST


いわきりです

Seiji Masugata wrote in <200307030317.h633Hdcu024018 @ azusa.digicom.dnp.co.jp> :
>> http://pear.php.net/package-info.php?pacid=95
>> と混同していたようです。(^^;
>本件とは関係ないですが、改めて上記URLを見ていたら
>そもそも根本から勘違いしている可能性が。(汗

どうでしょ ;p

bcompilerは、APC Version 1のmmapの実装に使われていたコードの
シリアライザを参考にして作成されたようで、ソースコードのキャッシュ
用途よりは、隠蔽に向いていると思います。

下記サンプルを試せば、判ると思いますが
主要なコードをbcompilerでバイトコード化し、
提供(納品)することで、隠蔽が可能となります。

make.phpでmy.cacheというバイトコードを作成し、
exec.phpで実行します。

提供すべきものは、my.cacheとexec.phpのみという形態になるでしょう。

-- make.php
<?php
dl('bz2.so');
dl('bcompiler.so');

function func_foo($a, $b) {
    return $a + $b;
}

class class_bar {
    var $a = 'class';
    var $b = 'bar';
    function get() {
        return $this->a . $this->b;
    }
}

define('CONST_BAZ', 10);

$fp = fopen('my.cache', "w");

bcompiler_write_header($fp);
bcompiler_write_function($fp, 'func_foo');
bcompiler_write_class($fp, 'class_bar');
bcompiler_write_constant($fp, 'CONST_BAZ');
bcompiler_write_footer($fp);
fclose($fp);
?>

-- exec.php
<?php
dl('bz2.so');
dl('bcompiler.so');

$fp = fopen('my.cache', "r");
bcompiler_read($fp);
fclose($fp);

echo "loaded function test:\n";
echo func_foo(3, 4) ."\n\n";

echo "loaded class test:\n";
$a = new class_bar();
echo $a->get() . "\n\n";

echo "loaded constant test:\n";
echo CONST_BAZ . "\n";
?>

#APCほど簡単では無いですが、可搬性のあるバイトコードを
#作成できます。
#bzip2で圧縮かけてあるのでパスワード等も一応不可視に
#なります。

-- 
Youichi Iwakiri



PHP-users メーリングリストの案内