文字列を書き込んだり、コンソールにログインしたりできますか?
私が意味したのは
JSPと同様にsystem.out.println("some")
、のようなものを印刷すると、ページではなくコンソールに表示されます。
文字列を書き込んだり、コンソールにログインしたりできますか?
JSPと同様にsystem.out.println("some")
、のようなものを印刷すると、ページではなくコンソールに表示されます。
回答:
Firefox
Firefoxでは、FirePHPと呼ばれる拡張機能を使用できます。これにより、PHPアプリケーションからコンソールへの情報のロギングとダンプが可能になります。これは素晴らしいWeb開発拡張Firebugのアドオンです。
クロム
ただし、Chromeを使用している場合は、Chrome Loggerまたはwebugと呼ばれるPHPデバッグツールがあります(webugはログの順序に問題があります)。
最近では、Clockworkが活発な開発を行っており、便利なデバッグとプロファイリング情報を提供する新しいパネルを追加することにより、開発ツールを拡張しています。それはのためのボックスのサポートが提供されていLaravel 4とスリム2およびサポートは、その拡張可能なAPIを介して追加することができます。
Xdebugの使用
PHPをデバッグするより良い方法は、Xdebugを使用することです。ほとんどのブラウザには、デバッグプロセスを初期化するために必要なcookie /クエリ文字列を渡すのに役立つヘルパー拡張機能が用意されています。
または、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
"Debug Objects: " . $data . ""
$data
出力に表示される場合は、関数を入力どおりに入力していません。一重引用符と二重引用符を注意深く調べて、上記のコードと一致していることを確認してください。$data
php変数です。ページがブラウザに送信されるまでに、そのphp変数はに渡されるパラメータに置き換えられますdebug_to_console
。ブラウザは決して見るべきではありません$data
。(page source
ブラウザで見ると、それは言うべきではありません$data
。)
単純なアプローチを探している場合は、JSONとしてエコーします。
<script>
console.log(<?= json_encode($foo); ?>);
</script>
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>"; }
デフォルトstdout
では、スクリプトがApacheで実行されているか、コマンドラインで手動で実行されているかに応じて、すべての出力がHTTP応答またはコンソールになります。ただしerror_log
、ロギングに使用でき、さまざまなI / Oストリームをで書き込むことができますfwrite
。
error_log
私はから端末への出力に必要なものであるビルトインWebサーバーPHP
以下を試してください。それは働いています:
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で作成されます。したがって、コンソールにメッセージが表示されます。
div
。<script>
ブロックがあるだけの場合、ブラウザには何も表示されません。
json.encode
て、引用符がコード行を壊さないようにすることをお勧めします。例:echo "<script>console.log(".json_encode($msg).")</script>";
人気の回答のリンク先のウェブページの作成者として、このシンプルなヘルパー関数の最後のバージョンを追加したいと思います。それははるかにしっかりしています。
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);`
また、画像として理解するための簡単な例も示します。
使用できると思います-
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"]}
より深みを加えるいくつかの素晴らしい答え。しかし、私はもっと単純で、JavaScript console.log()
コマンドのようなものが必要でした。
Ajaxアプリケーションの多くの「データの収集とXMLへの変換」でPHPを使用しています。console.log
その場合、JavaScript は機能しません。XML出力が壊れます。
Xdebugなどにも同様の問題がありました。
Windowsでの私のソリューション:
.txt
簡単にアクセスでき、書き込み可能なファイルを設定するerror_log
変数を.ini
ファイルにファイルに書き込みますerror_log('myTest');
PHPコマンドを使用してメッセージを送信するこのソリューションはシンプルで、ほとんどの場合私のニーズを満たしています。標準のPHP。プレビューペインは、PHPが書き込むたびに自動的に更新されます。
json_encode
することで問題も解決しますか?その場合、メッセージ内の引用符がスクリプトの引用符と干渉している可能性があります。(例:)echo "<script>console.log(".json_encode($msg).")</script>";
。そうでない場合、console.logスクリプトが壊れる原因となった問題と、ソリューションがそれを修正した方法/理由を知りたいと思います。あなたの解決策は良いです-私は単に原因となった状態console.log
またはxml出力が壊れる原因についてもっと知りたいと思っています。多くの場合、以前のようにエラーログを使用した方が、クイックログよりもはるかに優れていますconsole.log
。
$variable = "Variable";
echo "<script>console.log('$variable');</script>";
PHPとJavaScriptの相互作用。
私はこれが役立つと思います:
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を超えるものは表示されません
$output = '<script>console.log("' . str_repeat(" ", $priority-1)
あり. '");</script>';
ます:と。のみimplode(",", $data)
と$data
異なっています。
function phpconsole($label='var', $x) {
?>
<script type="text/javascript">
console.log('<?php echo ($label)?>');
console.log('<?php echo json_encode($x)?>');
</script>
<?php
}
JavaScriptコンソールではなくPHPログファイルに書き込む場合は、次のように使用できます。
error_log("This is logged only to the PHP log")
リファレンス:error_log
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ページからの例。
出力は次のようになります。
"ccampbell/chromephp": "*"
また、次のことを可能にするPHPライブラリーを備えた、優れたGoogle Chrome拡張機能であるPHPコンソールもあります。
error file:line
テキストエディタでジャンプします。私が開発中の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
子テーマのファイルに配置する必要があり、コードのどこからでも呼び出すことができます。
上記のすべてを放棄して、Debugger&Loggerを採用しました。褒められません!
右上のタブの1つをクリックするか、[ここをクリック]をクリックして展開/非表示にします。
異なる「カテゴリ」に注意してください。任意の配列をクリックして展開/折りたたむことができます。
ウェブページから
主な特徴:
- グローバル変数を表示($ GLOBALS、$ _ POST、$ _ GET、$ _ COOKIEなど)
- PHPのバージョンとロードされた拡張機能を表示する
- PHPの組み込みエラーハンドラーを置き換える
- SQLクエリのログ
- コードとSQLクエリの実行時間を監視する
- 変数の変更を検査する
- 関数呼び出しのトレース
- スクリプトのどの行が実行されたかをチェックするコードカバレッジ分析
- すべてのタイプの変数のダンプ
- ソースコードを表示するコードハイライター付きのファイルインスペクター
- JavaScriptコンソールにメッセージを送信(Chromeのみ)、Ajaxスクリプト用
2017年現在、Firebug、つまりFirePHPは無効になっています。
コンソールを介してデバッグするためにFirePHPからFirebugにシームレスに移行できるように、ChromePHPツールに少し変更を加えました。
この記事は明確で簡単な手順で説明します
Ajax呼び出しまたはXML / JSON応答の場合、本文をいじりたくない場合は、HTTPヘッダーを介してログを送信し、Web拡張機能を使用してコンソールに追加する必要があります。これは、FirePHP(Firefoxで使用できなくなりました)およびQuantumPHP(ChromePHPのフォーク)がFirefoxでそれを行う方法です。
忍耐力がある場合は、x-debugがより良いオプションです。スクリプトを一時停止し、何が起こっているのかを確認してから、スクリプトを再開する機能を使用して、PHPについてより深い洞察を得ることができます。
私はパーティーに遅れるかもしれませんが、私はロギング機能の実装を探していました:
console.log()
。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);
?>
これが私の解決策です。これの良い点は、好きなだけパラメータを渡すことができることです。
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);
これで、コンソールに出力が表示されるはずです。コーディングを楽しんでください:)
使用する:
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));
}
これが便利な機能です。使い方は非常に簡単で、任意のタイプの引数を好きなだけ渡すことができ、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要求を行うことを可能にします。
これは古い質問ですが、私はこれを探していました。ここでは、ここで回答されたいくつかの解決策と、他の場所で見つかった万能の解決策を得るためのいくつかのアイデアをまとめました。
コード:
// 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)を使用しています。それはかなりクールで、可能性は無限大です。お気に入りの曲を再生して、コーディングのストレスを軽減できます。