文字列を書いたり、コンソールにログインしたりできますか?
Jspのように、system.out.println("some")
のようなものを印刷すると、ページではなくコンソールに表示されます。
Firefox
Firefoxでは FirePHP という拡張子を使うことができます。これはあなたのPHPアプリケーションからコンソールへの情報のロギングとダンプを可能にします。これは素晴らしいWeb開発拡張機能 Firebug へのアドオンです。
Chrome
ただし、Chromeを使用している場合は、 Chrome Logger または webug と呼ばれるPHPデバッグツールがあります(webugにはログの順序に問題があります)。
最近では Clockwork が活発に開発されていて、便利なデバッグやプロファイリング情報を提供するために新しいパネルを追加することによって開発者ツールを拡張しています。それは Laravel 4 と Slim 2 をそのままサポートし、その拡張可能なAPIを通してサポートを追加することができます。
Xdebugを使う
あなたのPHPをデバッグするもっと良い方法は Xdebug を使うことでしょう。ほとんどのブラウザは、デバッグプロセスを初期化するために必要なcookie/query文字列を渡すのを助けるためのヘルパー拡張を提供します。
または、この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
単純なアプローチを探しているなら、JSONとしてエコーしてください。
<script>
console.log(<?= json_encode($foo); ?>);
</script>
デフォルトでは、すべての出力はstdout
に送られます。これは、スクリプトがApacheによって実行されるのか、コマンドラインで手動で実行されるのかに応じて、HTTP応答またはコンソールになります。しかし、ロギングには error_log
を使用でき、 さまざまなI/Oストリーム は fwrite
を使用して書き込むことができます。
これを試してみてくださいそれは働いています:
echo("<script>console.log('PHP: ".$data."');</script>");
echo
"<div display='none'>
<script type='text/javascript'>
console.log('console log message');
</script>
</div>";
を作成します
<div>
とともに
display="none"
divは表示されませんが、
console.log()
関数はjavascriptで作成されています。それで、あなたはコンソールでメッセージを得ます。
さらに深くなるいくつかの素晴らしい答え。しかし、私はもっとシンプルでJS console.log()
コマンドのようなものが必要でした。
PHPアプリケーションの多くの「データの収集とxmlへの変換」でAJAXを使用します。その場合、JSのconsole.log
は機能しません。それはxml出力を壊します。 (多分誰かがこれのための解決策を持っている?)
Xdebugなども同様の問題を抱えていました。
Windowsでの私の解決策:
.txt
ファイルを設定してください。error_log
ファイルのPHP .ini
変数をそのファイルに書き込むように設定します。error_log('myTest');
PHPコマンドを使用しますこの解決法は簡単で、私の必要性をほとんど満たしている標準のPHPを満たし、そしてプレビューペインはPHPがそれを書くたびに自動的に更新します。
リンクされたウェブページの作者として 一般的な答え 上記の私はこの単純なヘルパー関数の私の最後のバージョンを追加したいと思います。
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 );`
はるかに簡単に理解するための画像としても簡単な例。
私はそれが使用できると思います -
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
私はこれが役に立つと思います:
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値を使って制限することで重要度の低いログをオフにすることができます。
$variable = "Variable";
echo "<script>console.log('$variable');</script>";
PHPとJavascriptの相互作用.
function phpconsole($label='var',$x){
?>
<script type="text/javascript">
console.log('<?php echo ($label)?>');
console.log('<?php echo json_encode($x)?>');
</script>
<?php
}
配列、文字列、あるいはオブジェクトに対しても、短くて簡単。
function console_log( $data ) {
$output = "<script>console.log( 'PHP debugger: ";
$output .= json_encode(print_r($data, true));
$output .= "' );</script>";
echo $output;
}
JavaScriptコンソールではなくPHPログファイルに書き込みたい場合は、これを使用できます。
error_log ( "This is logged only to the PHP log" )
PHP Console with phpライブラリ というすばらしいGoogle Chrome拡張機能もあります。
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!');
その結果、出力は次のようになります。
私は 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
「
素晴らしい記事ありがとうございます。私が開発中の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ファイルに配置してから、コード内の任意の場所で呼び出すことができます。
Ajax呼び出しやxml/json応答の場合は、本体を混乱させたくない場合は、httpヘッダーを介してログを送信してから、Web拡張機能を使用してそれらをコンソールに追加する必要があります。これがFirePHPとQuantumPHP(ChromePHPのフォーク)がFirefoxでそれを行う方法です。
あなたが忍耐力を持っているならば、x-debugはより良いオプションです - あなたはあなたのスクリプトを一時停止し、何が起こっているのかを見て、そしてスクリプトを再開する能力で、PHPへのより深い洞察を得ます。
2017年の時点で、firebug、したがってfirephpは無効になっています。
私はコンソール経由でデバッグするためにfirephpからfirebugへのシームレスな移行を可能にするためにchromephpツールにいくつかの小さな修正を書きました。
この記事では明確な簡単なステップで説明します
これら二つのどれでも働いています:
<?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>");
?>
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 );
}
これは便利な機能です。使い方はとても簡単で、好きなだけ引数を渡すことができ、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要求を受け取ることを許可します。