是否可以将字符串或日志写入控制台?
我的意思是
就像在JSP中,如果我们打印类似system.out.println("some")
的东西,它会出现在控制台上,而不是页面上。
或者你可以使用来自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 . ""
。 - Mawg says reinstate Monica$data
,那么你没有按照所示的函数精确地键入。请仔细查看单引号和双引号,以确保它们与上面的代码匹配。$data
是一个PHP变量;在页面发送到浏览器时,该PHP变量将已被传递给debug_to_console
的参数替换。 浏览器不应该看到$data
。(如果在浏览器中查看“页面源代码”,它不应该显示$data
。) - ToolmakerSteveFirefox
在Firefox中,你可以使用一个叫做FirePHP的扩展工具,它可以将你的PHP应用程序的信息记录和转储到控制台中。这是一个非常棒的Web开发扩展工具Firebug的附加功能。
Chrome
然而,如果你使用Chrome浏览器,有一个名为Chrome Logger或者webug的PHP调试工具(webug在日志顺序方面存在问题)。
最近,Clockwork正在积极开发中,它通过添加一个新面板来扩展开发者工具,以提供有用的调试和性能分析信息。它为Laravel 4和Slim 2提供了开箱即用的支持,并且还可以通过可扩展的API进行扩展。
使用Xdebug
更好的方式是通过Xdebug来调试你的PHP。大多数浏览器都提供帮助扩展工具,以帮助你传递所需的cookie /查询字符串以初始化调试过程。
如果你想要一种简单的方法,可以将其作为JSON输出:
<script>
console.log(<?= json_encode($foo); ?>);
</script>
请尝试以下方法,它已经可以正常工作:
echo("<script>console.log('PHP: " . $data . "');</script>");
echo("<script>console.log('PHP OUTPUT: " . json_encode($data) . "');</script>");
进行修复。 - David B作为热门回答中链接网页的作者,我想添加我这个简单助手函数的最新版本。它更加可靠。
我使用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);`
此外,这里有一个简单的例子图片,更易于理解:
$variable = "Variable";
echo "<script>console.log('$variable');</script>";
PHP 和 JavaScript 的交互。
我认为它可以使用 --
function jsLogs($data, $isExit) {
$html = "";
$coll;
if (is_array($data) || is_object($data)) {
$coll = json_encode($data);
} else {
$coll = $data;
}
$html = "<script id='jsLogs'>console.log('PHP: ${coll}');</script>";
echo($html);
if ($isExit) 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"]}
echo
"<div display='none'>
<script type='text/javascript'>
console.log('console log message');
</script>
</div>";
创建一个。<div>
随着
display="none"
这样div将不会显示出来,但是
console.log()
JavaScript 中创建了一个函数。因此,您可以在控制台中获取该消息。
<script>
块,浏览器中将不会显示任何内容。 - Cave Johnsonjson.encode
的调用中,以便引号不会破坏您的代码行。例如:echo "<script>console.log(".json_encode($msg).")</script>";
- SherylHohman一些很好的答案提供了更深入的信息;但我需要更简单、更像JavaScript console.log()
命令的东西。
我在许多Ajax应用程序中使用PHP“收集数据并将其转换为XML”。在这种情况下,JavaScript的console.log
不起作用;它会破坏XML输出。
Xdebug等工具也存在类似的问题。
我的解决方案是:
.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
更好。 - SherylHohman