wordpressのソースを読みながらPHPを勉強する その2

【シリーズ一覧】

/wp-load.php

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

file_existsはその名のとおりファイルがあるかを調べてくれる。ディレクトリでも調べる。しかしPHPは内部にキャッシュを持っているようで、いったんこの関数がTrueを返した後ファイルを削除してからまた呼んでもTrueを返すらしい。もちろんここでいう削除は同じスクリプト内でのunlink()によるものではない場合。こういう場合はclearstatcache()を呼ばなければならない。んーー。

wp-config.phpがなければwordpressはまだインストールされていないものとしてインストーラが動くようだ。よってこのファイルをみれば各種設定がみれるだろう。


/wp-settings.php

WP_MEMORY_LIMITはこれまでどこでも設定されていないので’32M’が設定される。PHPの’memory_limit’の値がこれより低ければ大きくする。

しかしintval()に’32M’を渡しても32ににしかならないような気がする。memory_limitの値は文字列’32M’を受け付けるが数値の場合はバイトのようだ。よってWP_MEMORY_LIMITを設定する場合は数値にした方がよさそう。

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)