[192.168.162.128] cat parse_ini.php <?php $ret1 = parse_ini_file("sample.ini"); $ret2 = parse_ini_file("sample.ini"); [192.168.162.128] cat sample.ini [first_section] one = 1 five = 5 animal = BIRD [second_section] path = "/usr/local/bin" URL = "http://www.example.com/~username"parsekit にかけてみると、
[192.168.162.128] php -r 'var_dump( parsekit_compile_file("parse_ini.php", $error, PARSEKIT_SIMPLE));' array(10) { [0]=> string(37) "ZEND_SEND_VAL UNUSED 'sample.ini' 0x1" [1]=> string(42) "ZEND_DO_FCALL T(0) 'parse_ini_file' UNUSED" [2]=> string(26) "ZEND_ASSIGN T(1) T(0) T(0)" [3]=> string(37) "ZEND_SEND_VAL UNUSED 'sample.ini' 0x1" [4]=> string(42) "ZEND_DO_FCALL T(2) 'parse_ini_file' UNUSED" [5]=> string(26) "ZEND_ASSIGN T(3) T(0) T(2)" [6]=> string(27) "ZEND_RETURN UNUSED 1 UNUSED" [7]=> string(42) "ZEND_HANDLE_EXCEPTION UNUSED UNUSED UNUSED" ["function_table"]=> NULL ["class_table"]=> NULL }当たり前かもしれないが、INI ファイルは、opコードに展開されない。つまり、APCではキャッシュしない。
strace してみると、
[192.168.162.128] strace php parse_ini.php 2>&1 open("/home/sikaku/dev/fuwarin/trunk/php/exp/ini/sample.ini", O_RDONLY) = 8 fstat(8, {st_mode=S_IFREG|0664, st_size=130, ...}) = 0 lseek(8, 0, SEEK_CUR) = 0 read(8, "[first_section]\none = 1\nfive = 5"..., 8192) = 130 read(8, "", 8192) = 0 read(8, "", 8192) = 0 close(8) = 0 getcwd("/home/sikaku/dev/fuwarin/trunk/php/exp/ini", 4096) = 43 open("/home/sikaku/dev/fuwarin/trunk/php/exp/ini/sample.ini", O_RDONLY) = 8 fstat(8, {st_mode=S_IFREG|0664, st_size=130, ...}) = 0 lseek(8, 0, SEEK_CUR) = 0 read(8, "[first_section]\none = 1\nfive = 5"..., 8192) = 130 read(8, "", 8192) = 0 read(8, "", 8192) = 0 close(8) = 0どうやら、同じファイルにも関わらず毎回パースしてるようだ。