web-dev-qa-db-ja.com

どうすればPHPでコンソールに書き込みますか?

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

私が意味したのは

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

266

Firefox

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

Chrome

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

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

Xdebugを使う

あなたのPHPをデバッグするもっと良い方法は Xdebug を使うことでしょう。ほとんどのブラウザは、デバッグプロセスを初期化するために必要なcookie/query文字列を渡すのを助けるためのヘルパー拡張を提供します。

131
Malachi

または、このWebサイトのトリックを使用する 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
324
Senador

単純なアプローチを探しているなら、JSONとしてエコーしてください。

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

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

35
nikc.org

これを試してみてくださいそれは働いています:

echo("<script>console.log('PHP: ".$data."');</script>");
33
Mandy
echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";

を作成します

<div>

とともに

display="none"

divは表示されませんが、

console.log()

関数はjavascriptで作成されています。それで、あなたはコンソールでメッセージを得ます。

16
Neo

さらに深くなるいくつかの素晴らしい答え。しかし、私はもっとシンプルでJS console.log()コマンドのようなものが必要でした。

PHPアプリケーションの多くの「データの収集とxmlへの変換」でAJAXを使用します。その場合、JSのconsole.logは機能しません。それはxml出力を壊します。 (多分誰かがこれのための解決策を持っている?)

Xdebugなども同様の問題を抱えていました。

Windowsでの私の解決策:

  • .txtファイルを設定してください。
  • error_logファイルのPHP .ini変数をそのファイルに書き込むように設定します。
  • Windowsのファイルエクスプローラでファイルを開き、そのプレビューペインを開きます。
  • メッセージを送信するにはerror_log('myTest'); PHPコマンドを使用します

この解決法は簡単で、私の必要性をほとんど満たしている標準のPHPを満たし、そしてプレビューペインはPHPがそれを書くたびに自動的に更新します。

14
Klompenrunner

リンクされたウェブページの作者として 一般的な答え 上記の私はこの単純なヘルパー関数の私の最後のバージョンを追加したいと思います。

Var型のチェックを不要にするために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 var, object; here an array.
$data = [ 'foo' => 'bar' ];
debug_to_console( $data );`

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

はるかに簡単に理解するための画像としても簡単な例。

enter image description here

14
bueltge

私はそれが使用できると思います -

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 Array
jsLogs(array("test1", "test2")); # PHP: ["test1","test2"]

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

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

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

function console($data, $priority, $debug)
{
    if ($priority <= $debug)
    {
        if (is_array($data))
            $output = '<script>console.log("' . str_repeat(" ", $priority-1) . implode( ",", $data) . '");</script>';
        else
            $output = '<script>console.log("' . str_repeat(" ", $priority-1) . $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値を使って制限することで重要度の低いログをオフにすることができます。

11
zee
$variable = "Variable";
echo "<script>console.log('$variable');</script>";

PHPとJavascriptの相互作用.

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

配列、文字列、あるいはオブジェクトに対しても、短くて簡単。

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

JavaScriptコンソールではなくPHPログファイルに書き込みたい場合は、これを使用できます。

error_log ( "This is logged only to the PHP log" )

参照: http://php.net/manual/en/function.error-log.php

6

PHP Console with phpライブラリ というすばらしいGoogle Chrome拡張機能もあります。

  • Chrome JavaScriptコンソールおよび通知ポップアップでエラーと例外を確認してください。
  • 任意の型変数をダンプします。
  • リモートでPHPコードを実行します。
  • パスワードでアクセスを保護する.
  • 要求ごとにグループコンソールログを記録します。
  • エラーファイル:テキストエディタの行にジャンプします。
  • エラー/デバッグデータをクリップボードにコピーします(テスター用)。
5
barbushin

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

Firefox DevToolsは Chrome Loggerプロトコルを統合サポートしています

ロギングを有効にするには、 'ChromePhp.php'ファイル をプロジェクトに保存するだけです。それからそれはこのように使用することができます:

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

GitHubページからの例

その結果、出力は次のようになります。

Server log within Firefox DevTools

5

私は http://phptoolcase.com/guides/ptc-debug-guide.htmlを支持して上記のすべてを放棄しました 私はそれを十分に賞賛することができません!

右上にあるタブの1つをクリックするか、「ここをクリック」をクリックして展開/非表示を切り替えます。

さまざまな「カテゴリ」に注目してください。任意の配列をクリックして展開または配置することができます。

Webページから

"主な特徴:

Show globals vars ($GLOBALS, $_POST, $_GET, $_COOKIE ...)
Show php version and loaded extensions
Replace php built in error handler
Log sql queries
Monitor code and sql queries execution time
Inspect variables for changes
Function calls tracing
Code coverage analysis to check which lines of script where executed
Dump of all types of variable
File inspector with code highlighter to view source code
Send messages to js console(Chrome only), for ajax scripts

「 enter image description here

3
Mawg

素晴らしい記事ありがとうございます。私が開発中の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ファイルに配置してから、コード内の任意の場所で呼び出すことができます。

3
Clinton

Ajax呼び出しやxml/json応答の場合は、本体を混乱させたくない場合は、httpヘッダーを介してログを送信してから、Web拡張機能を使用してそれらをコンソールに追加する必要があります。これがFirePHPとQuantumPHP(ChromePHPのフォーク)がFirefoxでそれを行う方法です。

あなたが忍耐力を持っているならば、x-debugはより良いオプションです - あなたはあなたのスクリプトを一時停止し、何が起こっているのかを見て、そしてスクリプトを再開する能力で、PHPへのより深い洞察を得ます。

2
Frank Forte

2017年の時点で、firebug、したがってfirephpは無効になっています。

私はコンソール経由でデバッグするためにfirephpからfirebugへのシームレスな移行を可能にするためにchromephpツールにいくつかの小さな修正を書きました。

この記事では明確な簡単なステップで説明します

https://medium.com/@kudehinbuoluwaponle/migrate-from-firephp-to-chromephp-in-5-minutes-without-breaking-existing-code-e4afd1b28c5c

これら二つのどれでも働いています:

<?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
roybraym
function console_log( $data ) {
    $bt = debug_backtrace();
    $caller = array_shift($bt);

    if ( is_array( $data ) )
        error_log( end(split('/',$caller['file'])) . ':' . $caller['line'] . ' => ' . implode( ',', $data) );
    else
        error_log( end(split('/',$caller['file'])) . ':' . $caller['line'] . ' => ' . $data );

}
0
btm1

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

'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
Chris Sprague