概要
「C#でデバッガばかり使ったから変数の表示方法わからないぞ…」
3年位前にそんな状態だったので変数の表示方法集めてたのを思い出しました。
今でもよくプリントでバッグするせいで全くかわってないので列挙します。
また何か思い出したら追加します。
更新履歴
2018-05-22 バックトレースを追加
2020-10-13 権限周りの追加説明
内容
画面に何か表示させたい
分岐に入ったかとか、プログラムがここまで進んだかとか、そういうことを調べる時とかにたまに使ったりします。
画面が切り替わらないページとかで使ったりします
//文字列を表示してくれる echo '内容';
文字列だけじゃなくてオブジェクトも配列も画面に表示させたい
echoだと文字列しか表示できないので、配列とかの中身も見たい時
//これも画面に表示される、オブジェクトとか配列とかでも中身を表示してくれる便利なやつ var_dump($obj_array_string_etc); //こっちでも大丈夫 print_r($obj_array_string_etc); //これでも大丈夫、ちなみに3つとも出力時の書式が違う var_export($obj_array_string_etc);
3つの違いはここが詳しいです

ここで処理止めたい
データベースを見にいったり画面遷移しちゃうからechoで直接画面に書いても消えてしまうような場合、処理を止めないと、画面の表示が見えない時ありますよね、そんな時に使う関数があります。
dieとexitは名前が違うだけで同じ関数なので同じ書き方ができます。
//ここで処理が止まる。var_dump()の直後に使うと、次に処理が進まないので調べやすいです
die();
// こっちでも大丈夫、引数に文字が書けます
exit('引数も書けるよ、echoと同じように画面に表示されるよ');
//関数ではないので()なしでも動きます。
die;
exit;
ログに文字を書き出したい
いちいちechoとかvar_dump()を消すのが面倒になってくるのでテキスト形式でログを吐き出したいとき。
//php.iniに書いてある所定のログに書いてくれる
error_log ('内容');
指定のファイルに書き出したい
指定のログじゃなくて指定のフォルダとかのファイルに書きたい! 場合
引数の詳しい説明はPHPの公式サイトにあります。

//決めた第三引数で指定したフォルダに書かれる
error_log ('内容', 3, "/var/tmp/test-dayo.log");
//同じフォルダならこう
error_log ('内容', 3, "./test-dayo.log");
//オブジェクトをログに書き出したい場合
error_log (print_r($obj, true), 3, "/var/tmp/my-php-log.log");
//var_exportでも書き出せるけどvar_dumpだと書き出されない、注意
error_log (var_export($obj, true), 3, "/var/tmp/my-php-log.log");
パーミッション考えるのが面倒なのでtmpファイルに書き出しました。
書き込まれない場合はパーミッションを確認してみましょう。
PHPを動かしているユーザーに書き込み権限がないとファイル作成とテキストの追加ができません。
ログが書き込まれるディレクトリ(フォルダ)の所有者とグループと権限を調べてみて下さい。
phpでサーバーにapacheを使っているのなら、変更していない限りはapacheのr読み取り、w書き込み権限があれば書き込まれると思います。
FTPソフトやchownコマンド、chmodコマンドなどで変更してみましょう。
ちなみに.logファイルの中身を見たい場合はテキストエディタやviコマンドで開けば見られます。
ここまでの処理内容が知りたい
var_dump(debug_backtrace());
最近バックトレースをおぼえました。
これを書いておくとこの行に来るまでに通った処理が下記みたいな形で書き出されます。
便利ですね…、よく知らずにデバッグしてたな…。
0 =>
array (size=4)
'file' => string '/var/www/html/folder/file.php' (length=40)
'line' => int 319
'function' => string 'test_func' (length=14)
'args' =>
array (size=4)
0 =>
array (size=2)
...
1 => string 'datas1' (length=0)
2 => string 'datas2' (length=0)
3 => string 'datas3' (length=16)
おわり。
