PHPのデバッグ

コマンドラインから実行することで、詳細な情報を得られることがあります。

C:\>php filepath

情報の出力

変数情報の出力

void var_dump ( mixed $expression [, mixed $... ] )
PHP: var_dump - Manual
mixed print_r ( mixed $expression [, bool $return = false ] )
PHP: print_r - Manual

たとえば、

$a = array( 'one', '02'=>2, true, 0.1 );

を出力すると、それぞれ

var_dump( $a );
print_r( $a );
array(4) {
  [0]=>
  string(3) "one"
  ["02"]=>
  int(2)
  [1]=>
  bool(true)
  [2]=>
  float(0.1)
}
Array
(
    [0] => one
    [02] => 2
    [1] => 1
    [2] => 0.1
)

のようになります。

メッセージの出力

void echo ( string $arg1 [, string $... ] )
PHP: echo - Manual

かっこは不要であり、複数の引数を指定した場合のエラーを避けるため、記述すべきではありません。

echo 'aa';          // aa
echo 'aa', 'bb';    // aabb

echo( 'aa' );       // aa
echo( 'aa', 'bb' ); // Parse error: syntax error, unexpected ','

出力のキャプチャ

出力バッファを制御することで、出力内容を変数に取得できます。

ob_start();
echo 'Hello World';     // 出力はされず、バッファに保存される
$data = ob_get_clean(); // バッファの内容を取得し、バッファをクリアする

file_put_contents( 'data.log', $data );
PHP: 出力制御 - Manual

print_r()は第2引数にTRUEを指定することで結果が文字列で返されるので、それで変数に取得できます。

スクリプトの停止

void exit( [ string $status ] )
void exit( int $status )
PHP: exit - Manual

exit()の引数に整数を渡すとステータスコードと認識され、メッセージとして表示されません※1

※1 PHP 4.2.0以降

ファイルへの出力

ファイルの書き込み関数で、ファイルへ出力できます。

バックトレース

void debug_print_backtrace (
    [ int $options = 0 // DEBUG_BACKTRACE_IGNORE_ARGS … "args"を無視
    [, int $limit = 0  // スタックフレームの数の制限
    ]] )
PHP: debug_print_backtrace - Manual
<?php

function Foo()
{
    debug_print_backtrace();
}

function Bar( $a )
{
    Foo( 123 );
}

Bar( 'abc' );
#0  Foo(123) called at [C:\localhost\test.php:10]
#1  Bar(abc) called at [C:\localhost\test.php:13]