Heroku上のPHPアプリでprintデバッグする場合
error_log()で出力するのがお手軽
問題点
けれども、配列の中身が見たくて
$a = array(1, 2, array("a", "b", "c"));
error_log('$a:');
var_dump($a);
や
error_log('$a:' . var_dump($a));
としても
↓のようになって、配列の中身はHeroku logsに出力されない
$a:
原因
var_dump()は返り値が無いので、error_log()に出力内容が渡されていないから
対策
var_dumpの出力を変数に格納し、その変数をerror_log()に渡す
// var_dumpを文字列に変換する関数を作成
function get_str_var_dump($var){
ob_start(); // バッファリングON
var_dump($var);
$bar = ob_get_contents(); // バッファの内容を変数に格納
ob_end_clean(); // バッファを消去してバッファリングOFF
return $bar;
}
$a = array(1, 2, array("a", "b", "c"));
// 配列$aをget_str_var_dump()で文字列に変換してからerorr_log()に渡す
error_log('$a:' . get_str_var_dump($a));
↓ のように出力できた
$a:array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(3) {
[0]=>
string(1) "a
[1]=>
string(1) "b
[2]=>
string(1) "c
}
}
参考
https://macocci7.exblog.jp/18510693/
https://www.php.net/manual/ja/function.var-dump.php
https://www.php.net/manual/ja/function.ob-start.php