PHP - よく使う関数 - エラー処理


クラウディア 


1. 概要
2. debug_backtrace バックトレースを生成する
3. Laravel 上で

1. 概要

 「PHP」は、そもそもウェブページ生成のために作成された言語でありまして。  最終的な実行は、ウェブサーバ上になります。  ウェブサーバで動作しているので、デバッガをかますこともできず・・・。  デバッグするのは、なかなか大変で・・・。  本ページは、下記のサイトを参考にさせていただきました。
PHP: debug_backtrace - Manual」
「PHP で Backtrace を出力する

2. debug_backtrace バックトレースを生成する

 実行の際は、複雑怪奇な呼び出しになっていたりするので、どこから呼ばれているのかがわからないことも多々あります。  その際に、これは、有効な手段となります。

debug_backtrace ( int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT , int $limit = 0 ) : array
 参考サイトで言っているように、一般には、「Stack Trace」と言っているような気がします。  デバック個所のトレースを取得してくれます。  参考サイトのいうように。

<?php
function foo()
{
    $trace = debug_backtrace();
    print_r($trace);
}

function bar()
{
    foo();
}

bar();
 と書いて、「print_r」で出力しても。

Array
(
    [0] => Array
        (
            [file] => /home/hogehoge/lang/php/function/function01.php
            [line] => 10
            [function] => foo
            [args] => Array
                (
                )

        )

    [1] => Array
        (
            [file] => /home/hogehoge/lang/php/function/function01.php
            [line] => 13
            [function] => bar
            [args] => Array
                (
                )

        )

)
 だらだらと不要なものを出力してしまいますので。

<?php
function foo()
{
    $trace = debug_backtrace();

    foreach($trace as $line)
    {
        print("{$line["file"]}: line {$line["line"]}\n");
    }
}

function bar()
{
    foo();
}

bar();
 と書いた方が、デバックは、しやすいかな。  こんな出力になります。

/home/hogehoge/lang/php/function/function02.php: line 14
/home/hogehoge/lang/php/function/function02.php: line 17
 もちろん、ウェブ上に配置する際は、上記のように、「print」で出力するのえではなく、下記のように、「error_log」で出力します。

<?php
function foo()
{
    $trace = debug_backtrace();

    foreach($trace as $line)
    {
        error_log("{$line["file"]}: line {$line["line"]}");
    }
}

function bar()
{
    foo();
}

bar();

3. Laravel 上で

 「Laravel」の場合、基本的に、ウェブサーバのログでも、「PHP」のログでもないところに出力します。

/project path/storage/logs/laravel.log
 ですな。  なので、この中に混ぜ込みたい。  ヘッダ部に、下記の行をいれて。

use Illuminate\Support\Facades\Log;
 スタックトレースを出力したい箇所に、下記の行を記述します。

Log::debug(__FILE__." ".__FUNCTION__." ".__LINE__);
$trace = debug_backtrace();
foreach($trace as $line)
{
    Log::debug("{$line["file"]}: line {$line["line"]}");
}

earthcar(アースカー)
それがだいじWi-Fi
5G CONNECT
Amazonギフトカード
ネットオークションの相場、統計、価格比較といえばオークファン
損保との違い