/wp-load.php
1 error_reporting(E_ALL ^ E_NOTICE ^ E_USER_NOTICE);
error_reporting()はどんなエラーを出力するかを設定するもの。デフォルトでは”E_ALL &~ E_NOTICE”らしい。^は排他的論理輪だから、E_ALLからE_NOTICEとE_USER_NOTICEのビットを0にしたもの(これらを無効にしたもの)に設定する。しかしこのE_ALLは6143(=1011111111111)あるいは30719(=111011111111111)と言う中途半端な値になっている(バージョンによって違う?)。いずれにしても12bit目が0になっている。じゃあこのビットは何かというと、E_STRICT=2048=100000000000だ。このE_STRICTというのは特別扱いなのか。わかりずらい。
E_STRICTはPHPコードに対していろいろなアドバイスをしてくれるもののようだ。E_NOTICEとE_USER_NOTICEの違いはUSERの方は、trigger_error()を使ってエラーを表示させる。というよりtrigger_error()はUSER系のエラーしか発生させられないので、コードの中で独自のエラー処理のためのものだと思われる。PHP本体からUSER系のエラーが発生されることはないのだろう。
PHPではエラーが発生したとき呼ばれる関数をset_error_handlerで登録できるので、それを呼びたいときにtrigger_error()を使ってUSER系のエラーを発生させる。といってもこの関数が呼ばれるかどうかはerror_reporting()の設定には依存しないので、エラーハンドラの中でerror_reportingの値を見なければならない。しかし見ると言っても取得関数がないようだが、2回呼ばなければならないのか?それともini_get()を使えばいいのか?
そもそもini_set()があるのにerror_reporting()関数があるのはなぜだろうか?よくわからないのでスルー。
/wp-load.php
1 if ( file_exists( ABSPATH . 'wp-config.php') ) {
file_existsはその名のとおりファイルがあるかを調べてくれる。ディレクトリでも調べる。しかしPHPは内部にキャッシュを持っているようで、いったんこの関数がTrueを返した後ファイルを削除してからまた呼んでもTrueを返すらしい。もちろんここでいう削除は同じスクリプト内でのunlink()によるものではない場合。こういう場合はclearstatcache()を呼ばなければならない。んーー。
wp-config.phpがなければwordpressはまだインストールされていないものとしてインストーラが動くようだ。よってこのファイルをみれば各種設定がみれるだろう。
/wp-settings.php
123456789101112 if ( !defined('WP_MEMORY_LIMIT') ){define('WP_MEMORY_LIMIT', '32M');}if ( function_exists('memory_get_usage') ){if ( ( (int) @ini_get('memory_limit') < abs(intval(WP_MEMORY_LIMIT)) ) ){@ini_set('memory_limit', WP_MEMORY_LIMIT);}}
WP_MEMORY_LIMITはこれまでどこでも設定されていないので’32M’が設定される。PHPの’memory_limit’の値がこれより低ければ大きくする。
しかしintval()に’32M’を渡しても32ににしかならないような気がする。memory_limitの値は文字列’32M’を受け付けるが数値の場合はバイトのようだ。よってWP_MEMORY_LIMITを設定する場合は数値にした方がよさそう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php <?php define('WP_MEMORY_LIMIT', '32M'); echo ini_get('memory_limit'); // 128M echo "\n"; echo abs(intval(WP_MEMORY_LIMIT)); // 32 echo "\n"; ini_set('memory_limit', '32M'); echo ini_get('memory_limit'); // 32M echo "\n"; ini_set('memory_limit', 32*1024*1024); echo ini_get('memory_limit'); // 33554432 echo "\n"; ini_set('memory_limit', 32); echo ini_get('memory_limit'); // 32 echo "\n"; ?> |