WordPress:非同期処理でデバックをしたいとき


非同期処理 is 何

ざっくり言うと画面が描画されるときじゃなくて裏でなんかやってるとき。
WordPressでいうとファイルアップロードのフックとかWP REST APIで処理するときなんかがそう。
var_dump()で出力できないよーってとき。

使い方

非同期処理ではvar_dump()してもディスプレイ上に出力するには専用の処理を書いたりと
本来実装に必要がないのに手間がかかります。

それが一行差し込むだけでvar_dump()感覚で変数の中身を出力して確認できるので、
とっさの不具合対応なんかでもできるかなと。

また、遷移前の処理も場合によってはvar_dump()しようとしてもできない場合もあるので、
そういったときに。

どうやるの

error_log(print_r(array('hoge' => $hoge, 'fuga' => $fuga), true), "3", "C:/xampp/xxxx/wp-content/uploads/error.log");

これ

なにこれ

error_logっていうのがPHPにある。

error_log($message, $message_type, $destination);

$message

ログに記録されるエラーメッセージ。

何を出力するかですね。
例で言うと
print_r(array('hoge' => $hoge, 'fuga' => $fuga), true)
この箇所

$messageは文字列(string)である必要があるので、print_r()の第2引数でtrueを指定して文字列を返すようにしています。

$message_type

メッセージをどこに送るのかを指定します。以下の中から指定できます。

3
message は destination で指定されたファイルに追加されます。 明示的に指定しない限り、
message の 最後には改行文字は追加されません。

つまり、ファイル出力します!という意思表示。
数値を変えることにより、出力タイプが変わり、
メールで送信するとかPHPのエラーログに出力するということもできますが、
純粋に必要な情報だけ拾いたいので、ファイル出力が無難かなと思います。

$destination

メッセージの送信先。その設定は、上で説明している message_type パラメータの値によります。

今回は書き込み先ですね。
WordPressであれば上記例のとおり、パーミッションの関係でもuploads下に出力すればいいと思います。
余計なファイルも周りに少ないと思うので探しやすいと思います。

実装

実装例

$hoge = 'あけおめ';
$fuga = 'ことよろ';
error_log(print_r(array('hoge' => $hoge, 'fuga' => $fuga), true), "3", "C:/xampp/xxxx/wp-content/uploads/error.log");

出力例

Array
(
    [hoge] => あけおめ
    [fuga] => ことよろ
)

最後に

良いお年を

おまけ(2019.02.26加筆)

WordPressの場合、アップロードディレクトリの絶対パスを取得できるタグがあるので、
下記のようにすれば横にそんなに長くなくスッキリするし、
環境毎に出力先を書き換える必要がなくなってコピペでいける。

$upload_dir = wp_upload_dir();
error_log(print_r(array('hoge' => $hoge, 'fuga' => $fuga), true), "3", $upload_dir['basedir'] . "/error.log");

参考:関数リファレンス/wp_upload_dir