ご存知のようvar_dump()
に、値に加えて、そのデータ型と長さを表示します。
その出力をFireBug コンソールに記録する方法はありますか?
FirePHPとFireLoggerを試しましたが、どちらも変数の値のみを出力します (変数の値が正しくない場合もあります)。
多分あなたが必要とするのは次のようなものです:
function var2console($var, $name='', $now=false)
{
if ($var === null) $type = 'NULL';
else if (is_bool ($var)) $type = 'BOOL';
else if (is_string ($var)) $type = 'STRING['.strlen($var).']';
else if (is_int ($var)) $type = 'INT';
else if (is_float ($var)) $type = 'FLOAT';
else if (is_array ($var)) $type = 'ARRAY['.count($var).']';
else if (is_object ($var)) $type = 'OBJECT';
else if (is_resource($var)) $type = 'RESOURCE';
else $type = '???';
if (strlen($name)) {
str2console("$type $name = ".var_export($var, true).';', $now);
} else {
str2console("$type = " .var_export($var, true).';', $now);
}
}
function str2console($str, $now=false)
{
if ($now) {
echo "<script type='text/javascript'>\n";
echo "//<![CDATA[\n";
echo "console.log(", json_encode($str), ");\n";
echo "//]]>\n";
echo "</script>";
} else {
register_shutdown_function('str2console', $str, true);
}
}
使用法:var2console($myvar, '$myvar');
または単にvar2console($myvar);
$now
パラメータをに設定する必要はほとんどありません。これtrue
により、<script>
タグがすぐに出力されます。を使用する利点はregister_shutdown_function()
、HTML の「現在位置」に注意を払う必要がないことです。
はjson_encode()
、PHP から JavaScript への転送ですべての文字を保持します。唯一の注意点はエンコーディングについてです:json_encode()
でのみ動作しますUTF-8
(とにかく、ほとんどの場合に推奨されるエンコーディングです)。utf8_encode()
またはのようなものが必要になる場合がありmb_convert_encoding()
ます (または、別のエンコーディングを使用する場合UTF-8
)。
var_export()
Firebug のコンソールへの出力は、文字列の長さと配列の数を含む変数の型、およびオプションで変数の名前が前に付いた単純な の出力です。
var_export()
より読みやすい出力を提供しますvar_dump()
。の出力が本当に必要な場合はvar_dump()
、次のようなものを使用できます。
function dump2console($var, $name='', $now=false)
{
ob_start();
if (strlen($name)) {
echo "$name =\n";
}
var_dump($var);
$str = ob_get_clean();
str2console($str, $now);
}
使用法:dump2console($myvar, '$myvar');
または単にdump2console($myvar);
循環参照を避ける必要があります (var_dump()
検出が遅すぎて、var_export()
まったく検出されません)。これは、たとえば、次の場合に行う方法です$GLOBALS
。
function globals2console($now=false)
{
$g = $GLOBALS;
$g['GLOBALS'] = '(recursion)';
var2console($g, '$GLOBALS', $now);
}
script タグに console.log() を入れることで、JavaScript をコンソールにダンプできます。
<script type="text/javascript">
console.log("hello");
</script>
そこで、php ダンプを実行すると...
<script type="text/javascript">
console.log("<?php var_dump('abc'); ?>");
</script>
JavaScript を壊す var_dump の ' と " に注意する必要があります。この例では、HTML が次のようになるため、問題ありません。
<script type="text/javascript">
console.log("string 'abc' (length=3)");
</script>
PHP が処理されてから JavaScript に入れられることを覚えておいてください。コメントにダンプすることもできます。
<!--
<?php
var_dump('abc');
?>
-->
次に、ソースを表示したり、要素を調べたりできます。
<script>console.log( <?= json_encode( $var ) ?> )</script>
帽子をリングに投げ込むだけです。FirePHP が最適な方法のようです。
FirePHPはうまく機能し、Ajax の開発中にも使用できます。
サンプルコード:
require_once('FirePHPCore/fb.php'); # add the library
fb($var); #log the variable
fb( var_export($var,true) ); # log the variable with the var_export format
配列を渡す場合は、コンソールから配列をクリックすると、画面にポップアップが開きます。配列とオブジェクトを展開/折りたたむこともできます。
編集:
データ型と長さを探している場合は、を使用してvar_dump()
ください。
fb( var_dump( array(
1,
'a',
true
) ) );
Javascriptで何もせずvar_dump
に、firebug(クライアント側)の出力を確認したいだけの場合は、 Cookieを使用することをお勧めします。これは、そのように実行する方法を示しています。
<?php
$str = "Abu Romaïssae";
sendVarDumpToFront($str);
echo "<pre>";
echo $str."\n";
function sendVarDumpToFront( $mixed ){
ob_start();
var_dump($mixed);
$content = ob_get_contents();
ob_end_clean();
setcookie("var_dump",$content);
}
あなたがこのようにfirebugでそれを持つことができるより:
重要
この方法ではCookieを使用するため、コンテンツを出力する前にvar_dumpコンテンツを配置する必要があります。そうしないと、これは機能しません。
私は常にこのスクリプトを Zend_Log_Writer_Firebug (firephp http://www.firephp.org/を使用) と組み合わせて使用します。これは、アプリケーション内のリダイレクトまたは ajax 要求の後で xdebug を使用したデバッグが常に期待どおりに機能するとは限らないためです。
require_once '/Zend/Log.php';
require_once '/Zend/Log/Writer/Firebug.php';
require_once '/Zend/Controller/Response/Http.php';
require_once '/Zend/Controller/Request/Http.php';
// create the logger and log writer
$writer = new Zend_Log_Writer_Firebug();
$logger = new Zend_Log($writer);
// get the wildfire channel
$channel = Zend_Wildfire_Channel_HttpHeaders::getInstance();
// create and set the HTTP response
$response = new Zend_Controller_Response_Http();
$channel->setResponse($response);
// create and set the HTTP request
$channel->setRequest(new Zend_Controller_Request_Http());
// record log messages
$logger->info('test');
$logger->info(var_export($_SESSION,true));
$logger->info(count(var_export($_SESSION,true)));
$logger->info(strlen(var_export('hello',true)));
$logger->info(get_type($_SESSION,true));
// insert the wildfire headers into the HTTP response
$channel->flush();
// send the HTTP response headers
$response->sendHeaders();
独自のライブラリを構築して、変数の型を取得できます。
<?php
function get_type($var)
{
if(is_object($var))
return get_class($var);
if(is_null($var))
return 'null';
if(is_string($var))
return 'string';
if(is_array($var))
return 'array';
if(is_int($var))
return 'integer';
if(is_bool($var))
return 'boolean';
if(is_float($var))
return 'float';
if(is_resource($var))
return 'resource';
//throw new NotImplementedException();
return 'unknown';
}
?>
$logger->info() の引数として var_dump_ret への関数呼び出しを使用することも役立つ場合があります。まだテストしていません。
function var_dump_ret($mixed = null) {
ob_start();
var_dump($mixed);
$content = ob_get_contents();
ob_end_clean();
return $content;
}
この目標を達成する簡単な方法の1つは、単純なことを行うことだと思います
console.log(<?php var_export($var, true) ?>);
あなたは単純な問題を複雑にしすぎています。Firebug(およびその他のコンソール/ domログビューアはクライアント側の出力を表示するためのものです。PHPはサーバー側であり、コンソールログにプッシュすることはあまり意味がありません。
そうは言っても、本当にサーバー側の出力をコンソールログにパイプしたい場合は、その出力をjsonに変換して、コンソールログに渡す必要があります。ライフサイトで作業していることを人々に知らずに、単に変数値を出力したい場合(そして、ライブバージョンで作業するべきではありませんが、それは重要ではありません)、出力をファイルにパイプして読んでみませんか?その出力は好きなように、ajaxを使用してjqueryを介してダンプをログに渡すこともできます。
私が言いたいのは...あなたはあなたがやろうとしていることを過度に複雑にしているということです。
From: http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/
Fb::log($array, "dumping an array")
これにより、タイプとデータが取得されます。長さ/数については、手動で追加のロギングを行う必要があります。
var_dump() で出力を生成する Ajax (XHR) 呼び出しがある場合は、 'Console'または'Net'の下の FireBug でリクエストを調べることができます。プラス記号をクリックして展開し、[応答] タブを確認します。
それ以外の場合、表示しているメイン ページに var_dump() を配置している場合、フォーマットが台無しになる可能性がありますが、表示されているとおりにページに表示されるはずです。試す
echo '<PRE>'
var_dump() の前に、または代わりに直接出力ではなくページ ソースを表示します。
以下は、var_dump() から何かを取得し、それを JSON にエンコードしてから、console.log() に送信しようとします。これにより、特殊文字が出力を台無しにするのを防ぎます。
<?php
$myArray = array('Red','Green','Blue','Orange','Yellow','Purple');
ob_start();
var_dump($myArray);
$var_dump = ob_get_contents();
ob_end_clean();
?>
<script>
var var_dump = <?php echo json_encode($var_dump); ?>;
console.log(var_dump);
</script>
JavaScript からのみ jquery firebug と chrome の配列から:
console.dir('[object arrays]');
コンソールを開き、F12 を有効にします... コンソールにこのコードを書きます。これは、jquery から php への var_dump です。配列からjsonへ
var test = {"names":["john doe","JANE doe"],"ids":["123",null]}; console.dir(test);
PHP から直接コンソールが必要な場合は、プラグインが必要です