PHPでコンソールに書き込むにはどうすればよいですか?


324

文字列を書き込んだり、コンソールにログインしたりできますか?

私が意味したのは

JSPと同様にsystem.out.println("some")、のようなものを印刷すると、ページではなくコンソールに表示されます。

回答:


145

Firefox

Firefoxでは、FirePHPと呼ばれる拡張機能を使用できますこれにより、PHPアプリケーションからコンソールへの情報のロギングとダンプが可能になります。これは素晴らしいWeb開発拡張Firebugのアドオンです。

クロム

ただし、Chromeを使用している場合は、Chrome Loggerまたはwebugと呼ばれるPHPデバッグツールがあります(webugはログの順序に問題があります)。

最近では、Clockworkが活発な開発を行っており、便利なデバッグとプロファイリング情報を提供する新しいパネルを追加することにより、開発ツールを拡張しています。それはのためのボックスのサポートが提供されていLaravel 4スリム2およびサポートは、その拡張可能なAPIを介して追加することができます。

Xdebugの使用

PHPをデバッグするより良い方法は、Xdebugを使用することです。ほとんどのブラウザには、デバッグプロセスを初期化するために必要なcookie /クエリ文字列を渡すのに役立つヘルパー拡張機能が用意されています。


5
Xdebug Helperと呼ばれるPHPをデバッグするためのSafari拡張機能もあります。私はこのページからインストールしました:extensions.apple.com/#tab
Mark Mckelvie 2013

3
Fire PHPリンクが機能しなくなった
Brian Leishman、

9
echo "<script> console.log( 'PHP:'、"、get_option( "slides_data")、 "); </ script>";
Azmat Karim Khan

4
OPは、html / jsコンソールではなく標準出力に出力したいと述べています。
beppe9000

6
FirePHPは正式に死んでいます。
TimSparrow 2017年

407

または、PHPデバッグからコンソールにトリックを使用します。

まず、小さなPHPヘルパー関数が必要です

function debug_to_console($data) {
    $output = $data;
    if (is_array($output))
        $output = implode(',', $output);

    echo "<script>console.log('Debug Objects: " . $output . "' );</script>";
}

その後、次のように使用できます。

debug_to_console("Test");

これにより、次のような出力が作成されます。

Debug Objects: Test

5
FireFox v27で出力"Debug Objects: " . $data . ""
Mawgはモニカ

これをより有効にする唯一の方法は、ログで変数$ name: 'data'のペアを作成することです。素晴らしい機能ですが。
2014

10
@Mawg(およびそのコメントに賛成した人):$data出力に表示される場合は、関数を入力どおりに入力していません。一重引用符と二重引用符を注意深く調べて、上記のコードと一致していることを確認してください。$dataphp変数です。ページがブラウザに送信されるまでに、そのphp変数はに渡されるパラメータに置き換えられますdebug_to_console。ブラウザは決して見るべきではありません$data。(page sourceブラウザで見ると、それは言うべきではありません$data。)
ToolmakerSteve

1
私の投稿へのヒントをありがとう。しかし、時間と知識が変更され、機能も変更されました;)私は今それを更新しています。
bueltge

3
したがって、言い換えると、答えは次のとおりです。echo "<script> console.log( 'Debug Objects:"。$ output。 "'); </ script>";
クリスティン

69

単純なアプローチを探している場合は、JSONとしてエコーします。

<script>
    console.log(<?= json_encode($foo); ?>);
</script>

4
これは、もう少しコンテキストを追加しますfunction debug_log( $object=null, $label=null ){ $message = json_encode($object, JSON_PRETTY_PRINT); $label = "Debug" . ($label ? " ($label): " : ': '); echo "<script>console.log(\"$label\", $message);</script>"; }
robrecord

OPは、html / jsコンソールではなく標準出力に出力したいと述べています。
beppe9000

@ beppe9000不正解です。OPは、PHPからコンソールに書き込むことができるかどうかを尋ねます。引用:「文字列を書き込んだり、コンソールにログインしたりできますか?」
Dawson Irvine

これにより、var_dumpsなどを回避できます。うまく機能し、コンソールではjsonを適切に切り替えることができます。
Mbotet

41

デフォルトstdoutでは、スクリプトがApacheで実行されているか、コマンドラインで手動で実行されているかに応じて、すべての出力がHTTP応答またはコンソールになります。ただしerror_log、ロギングに使用でき、さまざまなI / Oストリームをで書き込むことができますfwrite


8
おかげで、error_log私はから端末への出力に必要なものであるビルトインWebサーバーPHP
マルティン・コル

37

以下を試してください。それは働いています:

echo("<script>console.log('PHP: " . $data . "');</script>");

5
処理が完了すると、phpはすべてのページを送信するため、これはあまりリアルタイムではありません。さらに、phpファイルにエラーがある場合、エラーページのみが返されるため、以前の出力は無視されるため、ログを確認することもできません。
Miro Markaravanes 2014年

1
@MiroMarkaravanesは完全に正しいことを指摘しておきます。致命的なエラーが発生すると、考えられるすべてのエラーを確実に処理またはキャッチしない限り、console.logが出力されない可能性があります。特に出力バッファリングを使用する場合-バッファが画面に到達しない場合、console.logも出力しません。それは心に留めておくべきものです。
whoshotdk

1
OPは、html / jsコンソールではなく標準出力に出力したいと述べています。
beppe9000

19
echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";

を作成します

<div>

とともに

display="none"

divは表示されませんが、

console.log()

関数はJavaScriptで作成されます。したがって、コンソールにメッセージが表示されます。


3
技術的には、これが最初の質問に対する正しい答えです。PHPからブラウザーコンソールに書き込む方法です。しかし、筆者はPHPをデバッグしようとしているため、より良いオプションがあると思います。ただし、これは正反対です。厳密に言えば、これは正解です。
Rolf

1
私は確かにそれが信じられないほど役に立ちました!
アルバート2018

シンプルにしておくと、このソリューションは自明です。特にあなたが私が今経験していると同時に噛むことがたくさんあるとき。
Olu Adabonyan

2
なぜあなたもが必要なのか理解できませんdiv<script>ブロックがあるだけの場合、ブラウザには何も表示されません。
Kodos Johnson 2019

1
また、エラーメッセージが変数に格納されている場合、または引用符が含まれている場合は、呼び出しでメッセージをラップしjson.encodeて、引用符がコード行を壊さないようにすることをお勧めします。例:echo "<script>console.log(".json_encode($msg).")</script>";
SherylHohman

18

人気の回答のリンク先のウェブページの作成者として、このシンプルなヘルパー関数の最後のバージョンを追加したいと思います。それははるかにしっかりしています。

json_encode()変数の型が必要かどうかを確認するために使用し、フレームワークの問題を解決するためにバッファーも追加します。の確実な復帰または過度の使用はありませんheader()

/**
 * Simple helper to debug to the console
 *
 * @param $data object, array, string $data
 * @param $context string  Optional a description.
 *
 * @return string
 */
function debug_to_console($data, $context = 'Debug in Console') {

    // Buffering to solve problems frameworks, like header() in this and not a solid return.
    ob_start();

    $output  = 'console.info(\'' . $context . ':\');';
    $output .= 'console.log(' . json_encode($data) . ');';
    $output  = sprintf('<script>%s</script>', $output);

    echo $output;
}

使用法

// $data is the example variable, object; here an array.
$data = [ 'foo' => 'bar' ];
debug_to_console($data);`

結果のスクリーンショット

また、画像として理解するための簡単な例も示します。

ここに画像の説明を入力してください


このアイデアが好きですが、それがAjaxリクエストに適していないことを確認できますか?
Mawgはモニカを2016

1
はい、それは純粋な静的phpであり、Ajaxではありません。
bueltge

しかし、それはページ本体にHML / JSコードを追加しているようです-そして私のAjaxはページ本体を返しません。申し訳ありませんが、助けてくれて
ありがとうとは

1
ajax呼び出しをリクエストする前にヘルパー関数をトリガーする必要があります。そうすると、コンソールにも結果が表示されます。
bueltge

そこで変数をそこに入れて、それぞれのキャラクターが独自の行になってしまいました。なぜそれをしているのか、ちょっと知りたい?console.infoを使用したことがない
yardpenalty.com

17

使用できると思います-

function jsLogs($data) {
    $html = "";
    $coll;

    if (is_array($data) || is_object($data)) {
        $coll = json_encode($data);
    } else {
        $coll = $data;
    }

    $html = "<script>console.log('PHP: ${coll}');</script>";

    echo($html);
    # exit();
}

# For String
jsLogs("testing string"); #PHP: testing string

# For Array
jsLogs(array("test1", "test2")); # PHP: ["test1","test2"]

# For Object
jsLogs(array("test1"=>array("subtest1", "subtest2"))); #PHP: {"test1":["subtest1","subtest2"]}

3
非常に洗練されたもの。ありがとう@Pankaj Bisht
Vickar

2
説明が正しいでしょう。
Peter Mortensen

14

より深みを加えるいくつかの素晴らしい答え。しかし、私はもっと単純で、JavaScript console.log()コマンドのようなものが必要でした。

Ajaxアプリケーションの多くの「データの収集とXMLへの変換」でPHPを使用しています。console.logその場合、JavaScript は機能しません。XML出力が壊れます。

Xdebugなどにも同様の問題がありました。

Windowsでの私のソリューション:

  • .txt簡単にアクセスでき、書き込み可能なファイルを設定する
  • PHP error_log変数を.iniファイルにファイルに書き込みます
  • Windows ファイルエクスプローラーファイルを開き、そのプレビューウィンドウを開く
  • error_log('myTest');PHPコマンドを使用してメッセージを送信する

このソリューションはシンプルで、ほとんどの場合私のニーズを満たしています。標準のPHP。プレビューペインは、PHPが書き込むたびに自動的に更新されます。


メッセージをラップjson_encodeすることで問題も解決しますか?その場合、メッセージ内の引用符がスクリプトの引用符と干渉している可能性があります。(例:)echo "<script>console.log(".json_encode($msg).")</script>";。そうでない場合、console.logスクリプトが壊れる原因となった問題と、ソリューションがそれを修正した方法/理由を知りたいと思います。あなたの解決策は良いです-私は単に原因となった状態console.logまたはxml出力が壊れる原因についてもっと知りたいと思っています。多くの場合、以前のようにエラーログを使用した方が、クイックログよりもはるかに優れていますconsole.log
SherylHohman


11

私はこれが役立つと思います:

function console($data, $priority, $debug)
{
    if ($priority <= $debug)
    {
        $output = '<script>console.log("' . str_repeat(" ", $priority-1) . (is_array($data) ? implode(",", $data) : $data) . '");</script>';

        echo $output;
    }
}

そしてそれを次のように使用します:

<?php
    $debug = 5; // All lower and equal priority logs will be displayed
    console('Important', 1 , $debug);
    console('Less Important', 2 , $debug);
    console('Even Less Important', 5 , $debug);
    console('Again Important', 1 , $debug);
?>

コンソールの出力:

Important
 Less Important
     Even Less Important
Again Important

また、$ debug値を使用してログを制限することで、重要性の低いログをオフに切り替えることができます。


あなたが呼び出す場合、console('Even Less Important' ,6 , $debug);これはコンソールに表示されませんか?なんでそうなの?5を超えるものは表示されません
HattrickNZ

2
@HattrickNZこれは、さまざまなレベルのログメッセージを持つことができるようにするためです。デバッグする場合は、多くの情報を含む非常におしゃべりなメッセージストリームを表示することができますが、通常の操作では、デバッグを1に設定して、最も重要なエラー/ログ項目のみを表示することができます。コードを書くときに重要な項目を決めるのはあなた次第です。
Toby Allen

OPは、html / jsコンソールではなく標準出力に出力したいと述べています。
beppe9000

1
はい、ただし繰り返しコード(冗長性)-リファクタリングする必要が$output = '<script>console.log("' . str_repeat(" ", $priority-1)あり. '");</script>';ます:と。のみimplode(",", $data)$data異なっています。
Peter Mortensen

1
@ピーター・モーテンセン-実話!この4年間の投稿を編集しました!:)
zee

7

配列、文字列、またはオブジェクトの場合も短くて簡単です。

function console_log( $data ) {
  $output  = "<script>console.log( 'PHP debugger: ";
  $output .= json_encode(print_r($data, true));
  $output .= "' );</script>";
  echo $output;
}

1
OPは、html / jsコンソールではなく、サーバー側のターミナル/標準出力に出力したいと述べています。
beppe9000

7
function phpconsole($label='var', $x) {
    ?>
    <script type="text/javascript">
        console.log('<?php echo ($label)?>');
        console.log('<?php echo json_encode($x)?>');
    </script>
    <?php
}

1
OPは、html / jsコンソールではなく、サーバー側のターミナル/標準出力に出力したいと述べています。
beppe9000


6

Chromeには、PHPメッセージを記録できるChrome Loggerと呼ばれる拡張機能があります。

Firefox DevToolsには、Chrome Loggerプロトコルのサポート統合されています

ロギングを有効にするには、プロジェクトに「ChromePhp.php」ファイルを保存するだけです。その後、次のように使用できます。

include 'ChromePhp.php';
ChromePhp::log('Hello console!');
ChromePhp::log($_SERVER);
ChromePhp::warn('something went wrong!');

GitHubページからの例。

出力は次のようになります。

Firefox DevTools内のサーバーログ


また、作曲を経由して、それをインストールすることができます"ccampbell/chromephp": "*"
padawanTony

5

また、次のことを可能にするPHPライブラリーを備え、優れたGoogle Chrome拡張機能であるPHPコンソールもあります。

  • Chrome JavaScriptコンソールと通知ポップアップでエラーと例外を確認します。
  • あらゆるタイプの変数をダンプします。
  • PHPコードをリモートで実行します。
  • パスワードでアクセスを保護します。
  • リクエストごとにコンソールログをグループ化します。
  • error file:lineテキストエディタでジャンプします。
  • エラー/デバッグデータをクリップボードにコピーします(テスター用)。

1
PHPエラー、例外、およびユーザー定義のデバッグ出力をJSコンソールに書き込むための私の好ましい方法。私は何年も使っています-信頼性が高く、PHPのリビジョンを最新に保っています。他には何も使いません。
Velojet 2015

3

私が開発中のWordPressプラグインでコードをデバッグする方法を探していて、この投稿に出くわしました。

他の応答から自分に最も当てはまるコードを取り出し、それらをWordPressのデバッグに使用できる関数に結合しました。関数は次のとおりです。

function debug_log($object=null, $label=null, $priority=1) {
    $priority = $priority<1? 1: $priority;
    $message = json_encode($object, JSON_PRETTY_PRINT);
    $label = "Debug" . ($label ? " ($label): " : ': ');
    echo "<script>console.log('" . str_repeat("-", $priority-1) . $label . "', " . $message . ");</script>";
}

使用法は次のとおりです。

$txt = 'This is a test string';
$sample_array = array('cat', 'dog', 'pig', 'ant', 'fly');
debug_log($txt, '', 7);
debug_log($sample_array);

この関数をWordPress開発で使用する場合、関数はfunctions.php子テーマのファイルに配置する必要があり、コードのどこからでも呼び出すことができます。


2

上記のすべてを放棄して、Debugger&Loggerを採用しました。褒められません!

右上のタブの1つをクリックするか、[ここをクリック]をクリックして展開/非表示にします。

異なる「カテゴリ」に注意してください。任意の配列をクリックして展開/折りたたむことができます。

ウェブページから

主な特徴:

  • グローバル変数を表示($ GLOBALS、$ _ POST、$ _ GET、$ _ COOKIEなど)
  • PHPのバージョンとロードされた拡張機能を表示する
  • PHPの組み込みエラーハンドラーを置き換える
  • SQLクエリのログ
  • コードとSQ​​Lクエリの実行時間を監視する
  • 変数の変更を検査する
  • 関数呼び出しのトレース
  • スクリプトのどの行が実行されたかをチェックするコードカバレッジ分析
  • すべてのタイプの変数のダンプ
  • ソースコードを表示するコードハイライター付きのファイルインスペクター
  • JavaScriptコンソールにメッセージを送信(Chromeのみ)、Ajaxスクリプト用

ここに画像の説明を入力してください


こんにちは。より最新で現在維持されている最新のフォークまたは同様のツールはありますか?
Metafaniel

私はそれをコーディングしなかったので、最新のフォークについては、GitHubに行くだけでしょうか?別の方法については、softwarerecs.stackexchange.comでお問い合わせください。
Mawgはモニカを2018

1
@MawgHi、ありがとう。phptoolcase Githubとそこにリストされているフォークが5年間更新されていないため、私は尋ねました。他のStackExchangeサイトをありがとう。私は時計仕掛けを見つけました。似ているか、それとも良いのかしら…
Metafaniel

そして、ありがとう、あなたの時計仕掛けのために。それは素晴らしいように見えます(私がそれらのフレームワークを使用していないのは残念です(それがデータベースクエリをダンプできる方法なのでしょうか-フレームワークをフックすることによって))。調査する価値があります。(+1)
Mawgはモニカを2018


2

Ajax呼び出しまたはXML / JSON応答の場合、本文をいじりたくない場合は、HTTPヘッダーを介してログを送信し、Web拡張機能を使用してコンソールに追加する必要があります。これは、FirePHP(Firefoxで使用できなくなりました)およびQuantumPHP(ChromePHPのフォーク)がFirefoxでそれを行う方法です。

忍耐力がある場合は、x-debugがより良いオプションです。スクリプトを一時停止し、何が起こっているのかを確認してから、スクリプトを再開する機能を使用して、PHPについてより深い洞察を得ることができます。



2

私はパーティーに遅れるかもしれませんが、私はロギング機能の実装を探していました:

  • javascriptのように、可変数のコンマ区切りの引数を取りますconsole.log()
  • (シリアル化された文字列だけでなく)フォーマットされた出力を提供します。
  • 一般的なjavascriptと区別できconsole.log()ます。

したがって、出力は次のようになります。

ここに画像の説明を入力してください

(以下のスニペットはphpでテストされ7.2.11ています。phpの下位互換性についてはわかりません。console.log()引数の後にコンマを作成するため、JavaScriptの問題(古いブラウザの場合)でも問題になる可能性があります。まで合法ES 2017です。)

<?php

function console_log(...$args)
{
    $args_as_json = array_map(function ($item) {
        return json_encode($item);
    }, $args);

    $js_code = "<script>console.log('%c 💬 log from PHP: ','background: #474A8A; color: #B0B3D6; line-height: 2',";
    foreach ($args_as_json as $arg) {
        $js_code .= "{$arg},";
    }
    $js_code .= ")</script>";

    echo $js_code;
}

$list = ['foo', 'bar'];
$obj = new stdClass();
$obj->first_name = 'John';
$obj->last_name = 'Johnson';

echo console_log($list, 'Hello World', 123, $obj);

?>

このスニペットは私を救いました。:)私は実際のサーバーにアクセスせずに本番コードにいくつかの変更を加える必要があり、これはそれを回避するのに最適でした。ありがとう!
Raphael Aleixo

お役に立ててよかったです。
HynekS

1

次の2つのいずれも機能しています。

<?php
    $five = 5;
    $six = 6;
?>
<script>
    console.log(<?php echo $five + $six ?>);
</script>


<?php
    $five = 5;
    $six = 6;
    echo("<script>console.log($five + $six);</script>");
?>

1

これが私の解決策です。これの良い点は、好きなだけパラメータを渡すことができることです。

function console_log()
{
    $js_code = 'console.log(' . json_encode(func_get_args(), JSON_HEX_TAG) .
        ');';
    $js_code = '<script>' . $js_code . '</script>';
    echo $js_code;
}

このように呼ぶ

console_log('DEBUG>>', 'Param 1', 'Param 2');
console_log('Console DEBUG:', $someRealVar1, $someVar, $someArray, $someObj);

これで、コンソールに出力が表示されるはずです。コーディングを楽しんでください:)


0

使用する:

function console_log($data) {
    $bt = debug_backtrace();
    $caller = array_shift($bt);

    if (is_array($data))
        $dataPart = implode(',', $data);
    else
        $dataPart = $data;

    $toSplit = $caller['file'])) . ':' .
               $caller['line'] . ' => ' . $dataPart

    error_log(end(split('/', $toSplit));
}

1
あなたのアイデアと解決策についてのヒントを追加する必要があります。また、ソースには未使用のソースがあります。
bueltge

0

これが便利な機能です。使い方は非常に簡単で、任意のタイプの引数を好きなだけ渡すことができ、JavaScriptからconsole.logを呼び出した場合と同じように、ブラウザのコンソールウィンドウにオブジェクトの内容が表示されますが、PHPから

「TAG-YourTag」を渡すことでタグを使用することもでき、「TAG-YourNextTag」などの別のタグが読み取られるまで適用されます。

/*
 *  Brief:         Print to console.log() from PHP
 *
 *  Description:   Print as many strings,arrays, objects, and
 *                 other data types to console.log from PHP.
 *
 *                 To use, just call consoleLog($data1, $data2, ... $dataN)
 *                 and each dataI will be sent to console.log - note
 *                 that you can pass as many data as you want an
 *                 this will still work.
 *
 *                 This is very powerful as it shows the entire
 *                 contents of objects and arrays that can be
 *                 read inside of the browser console log.
 *
 *                 A tag can be set by passing a string that has the
 *                 prefix TAG- as one of the arguments. Everytime a
 *                 string with the TAG- prefix is detected, the tag
 *                 is updated. This allows you to pass a tag that is
 *                 applied to all data until it reaches another tag,
 *                 which can then be applied to all data after it.
 *
 *                 Example:
 *
 *                 consoleLog('TAG-FirstTag', $data, $data2, 'TAG-SecTag, $data3);
 *
 *                 Result:
 *                     FirstTag '...data...'
 *                     FirstTag '...data2...'
 *                     SecTag   '...data3...'
 */
function consoleLog(){
    if(func_num_args() == 0){
        return;
    }

    $tag = '';
    for ($i = 0; $i < func_num_args(); $i++) {
        $arg = func_get_arg($i);
        if(!empty($arg)){
            if(is_string($arg) && strtolower(substr($arg, 0, 4)) === 'tag-'){
                $tag = substr($arg, 4);
            }else{
                $arg = json_encode($arg, JSON_HEX_TAG | JSON_HEX_AMP );
                echo "<script>console.log('" . $tag . " " . $arg . "');</script>";
            }
        }
    }
}

注:func_num_args()およびfunc_num_args()は、動的な数の入力引数を読み取るためのPHP関数であり、この関数が1つの関数呼び出しから無限に多くのconsole.log要求を行うことを可能にします。


0

これは古い質問ですが、私はこれを探していました。ここでは、ここで回答されたいくつかの解決策と、他の場所で見つかった万能の解決策を得るためのいくつかのアイデアをまとめました。

コード:

    // Post to browser console
    function console($data, $is_error = false, $file = false, $ln = false) {
        if(!function_exists('console_wer')) {
            function console_wer($data, $is_error = false, $bctr, $file, $ln) {
                echo '<div display="none">'.'<script type="text/javascript">'.(($is_error!==false) ? 'if(typeof phperr_to_cns === \'undefined\') { var phperr_to_cns = 1; document.addEventListener("DOMContentLoaded", function() { setTimeout(function(){ alert("Alert. see console."); }, 4000); });  }' : '').' console.group("PHP '.(($is_error) ? 'error' : 'log').' from "+window.atob("'.base64_encode((($file===false) ? $bctr['file'] : $file)).'")'.((($ln!==false && $file!==false) || $bctr!==false) ? '+" on line '.(($ln===false) ? $bctr['line'] : $ln).' :"' : '+" :"').'); console.'.(($is_error) ? 'error' : 'log').'('.((is_array($data)) ? 'JSON.parse(window.atob("'.base64_encode(json_encode($data)).'"))' : '"'.$data.'"').'); console.groupEnd();</script></div>'; return true;
            }
        }
        return @console_wer($data, $is_error, (($file===false && $ln===false) ? array_shift(debug_backtrace()) : false), $file, $ln);
    }

    //PHP Exceptions handler
    function exceptions_to_console($svr, $str, $file, $ln) {
        if(!function_exists('severity_tag')) {
            function severity_tag($svr) {
                $names = [];
                $consts = array_flip(array_slice(get_defined_constants(true)['Core'], 0, 15, true));
                foreach ($consts as $code => $name) {
                    if ($svr & $code) $names []= $name;
                }
                return join(' | ', $names);
            }
        }
        if (error_reporting() == 0) {
            return false;
        }
        if(error_reporting() & $svr) {
            console(severity_tag($svr).' : '.$str, true, $file, $ln);
        }
    }

    // Divert php error traffic
    error_reporting(E_ALL);  
    ini_set("display_errors", 1);
    set_error_handler('exceptions_to_console');

テストと使用法:

使い方は簡単です。手動でコンソールに投稿するための最初の機能を含めます。PHP例外処理を迂回させるために2番目の関数を使用します。次のテストは考えを与えるべきです。

    // Test 1 - Auto - Handle php error and report error with severity info
    $a[1] = 'jfksjfks';
    try {
          $b = $a[0];
    } catch (Exception $e) {
          echo "jsdlkjflsjfkjl";
    }

    // Test 2 - Manual - Without explicitly providing file name and line no.
          console(array(1 => "Hi", array("hellow")), false);

    // Test 3 - Manual - Explicitly providing file name and line no.
          console(array(1 => "Error", array($some_result)), true, 'my file', 2);

    // Test 4 - Manual - Explicitly providing file name only.
          console(array(1 => "Error", array($some_result)), true, 'my file');

説明 :

  • この関数console($data, $is_error, $file, $fn)は、最初の引数として文字列または配列を取り、js挿入を使用してコンソールに投稿します。

  • 2番目の引数は、通常のログとエラーを区別するためのフラグです。エラーについては、イベントリスナーを追加して、エラーがスローされた場合にアラートで通知し、コンソールでも強調表示します。このフラグのデフォルトはfalseです。

  • 3番目と4番目の引数は、オプションのファイル番号と行番号の明示的な宣言です。存在しない場合、デフォルトで事前定義されたphp関数debug_backtrace()を使用して取得します。

  • 次の関数にexceptions_to_console($svr, $str, $file, $ln)は、phpのデフォルトの例外ハンドラーによって呼び出される順序で4つの引数があります。ここで、最初の引数は重大度severity_tag($code)です。関数を使用して事前定義された定数とさらにクロスチェックし、エラーに関する詳細情報を提供します。

注意:

  • 上記のコードは、古いブラウザでは利用できないJS関数とメソッドを使用しています。古いバージョンとの互換性のために、交換が必要です。

  • 上記のコードは、あなただけがサイトにアクセスできるテスト環境用です。これをライブ(運用)Webサイトで使用しないでください。

提案:

  • 最初の関数console()はいくつかの注意を投げたので、それらを別の関数で囲み、エラー制御演算子 '@'を使用して呼び出しました。通知を気にしなければ、これは回避できます。

  • 最後に重要なことですが、コーディング中にアラートがポップアップ表示されると煩わしい場合があります。このため、ポップアップアラートの代わりにこのビープ(ソリューションに含まれる:https : //stackoverflow.com/a/23395136/6060602)を使用しています。それはかなりクールで、可能性は無限大です。お気に入りの曲を再生して、コーディングのストレスを軽減できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.