【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

PHPでデバッグ。さてどうする・・・?

こんにちは。
開発チームのワイルド担当、萬代です。

開発を進めるにあたって、必ずついて回るのがデバッグ。今回は、デバッグする際の強力な味方、var_exportについて解説してみたいと思います。

 

デバッグする時、どうやってますか?

基本中の基本はvar_dumpだと思います。これを知らない人は、恐らくPHPを書いたことがない人でしょう。
でも、var_dumpはログに出力できません(単体では、という事。できなくはないけれど、デバッグという用途を考えるとお手軽感がまるでない)。
これがvar_dump最大の悩みどころだと思います。

じゃあ、print_rなのか?
print_rの前後でpreタグをechoするとか、あるある過ぎてもはやギャグですね。たまにやります(やるのか?)が。

serialize? それをDBに突っ込みますか。PHP前提ならそれでもいい・・・訳ないですよね。serializeでデバッグするなんて、茨の道にしか見えないけれど、いるんですよね、たまに。

もろに表示させたい時は、var_dumpでいいんですが、ログに書き落とすなどの用途に使う場合は、var_exportを私は推したい。
もしかすると、今更声高に言うほどではないのかも知れない。

 

var_exportってなんぞ?

var_exportという関数は、その名の通り、変数を外出しする時に使うものです。
その証左に、出力される情報は、まんまPHPの変数宣言となっています。

1
2
3
4
5
6
7
8
9
10
<?php
 
$hoge = array(
    'a',
    'b',
    'c',
    'd',
);
 
var_export($hoge);

この出力は、以下のようになります。

1
2
3
4
5
6
array (
  0 => 'a',
  1 => 'b',
  2 => 'c',
  3 => 'd',
)

ちなみに、var_dumpとprint_rのフォーマットは以下の通りです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// var_dump
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
}
 
// print_r
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)

ちなみに、PHP: var_export - Manual のサンプルソースに
var_exportしたデータを、evalを使って再度変数として定義するやり方が載っていますが、使途は不明ですが、要はそういう事です。

 

var_exportの真の実力

var_exportは、弊社が得意としているAPI開発において、その実力を遺憾なく発揮します。
API開発では、受け取ったリクエストを処理してJSON形式にして出力する事が多いですが、var_dumpすると、var_dumpした情報付きのJSONデータをレスポンスとして返してしまうので、クライアント側でJSONをパースする際に確実にエラーになります。

その際、ログファイルをtailして動作の確認をする事が多いと思いますが、前述の通り、ログファイルにvar_dumpの情報を書き落とすには、少しコツが必要です。
var_exportなら、第二引数にtrueを添えるだけで、出力を変数に格納できるので、ログファイルへの出力は非常に簡単です。

fuelphpなら、以下のようにログファイルへ出力できます。

1
2
3
4
5
6
7
8
$hoge = array(
    'a',
    'b',
    'c',
    'd',
);
 
Log::debug(var_export($hoge, true));

可変引数のvar_dumpには到底出来ない芸当ですね。

 

var_dumpは配列内のデータ個数も出力してくれて便利じゃん

慣れろ、としか言いようがありません。
以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
3,004
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

萬代陽一

ソーシャルゲームのウェブ API などの開発がメイン業務ですが、ありがたいことにマーケティングなどいろんな仕事をさせてもらえています。
なおビヨンド内での私の肖像権は CC0 扱いになっています。