[英]How to 'console log' PHP code in Chrome or Firefox?
我一直在寻找如何在Chrome或Firefox中调试PHP代码的方法,但我找不到真正的解决方案。 这是我的PHP:
<?php
if(isset($_POST["data"]))
{
$var = $_POST["data"];
print "your message: " . $_POST["data"];
if(!empty($_POST['ip.data'])){
$data = $_POST['ip.data'];
$fname = mktime() . ".txt";//generates random name
$file = fopen("upload/" .$fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}
}
?>
我希望能够看到print "your message: " . $_POST["data"];
的输出print "your message: " . $_POST["data"];
print "your message: " . $_POST["data"];
或Chrome或Firefox中的任何错误。 我试过了应该可以调试php的Firefox Quantum? 无论如何,我该如何控制台登录?
第一步是要认识到,通常是服务器端语言的PHP与从根本上是Javascript的浏览器控制台是完全不同的上下文。 因此,要从服务器向浏览器的控制台显示消息,您将需要找到某种方式将这些消息(例如错误)传达给浏览器。
到那时,您可能会考虑将脚本标签嵌入PHP那样简单:
function debugToBrowserConsole ( $msg ) {
$msg = str_replace('"', "''", $msg); # weak attempt to make sure there's not JS breakage
echo "<script>console.debug( \"PHP DEBUG: $msg\" );</script>";
}
function errorToBrowserConsole ( $msg ) {
$msg = str_replace('"', "''", $msg); # weak attempt to make sure there's not JS breakage
echo "<script>console.error( \"PHP ERROR: $msg\" );</script>";
}
function warnToBrowserConsole ( $msg ) {
$msg = str_replace('"', "''", $msg); # weak attempt to make sure there's not JS breakage
echo "<script>console.warn( \"PHP WARNING: $msg\" );</script>";
}
function logToBrowserConsole ( $msg ) {
$msg = str_replace('"', "''", $msg); # weak attempt to make sure there's not JS breakage
echo "<script>console.log( \"PHP LOG: $msg\" );</script>";
}
# Convenience functions
function d2c ( $msg ) { debugToBrowserConsole( $msg ); }
function e2c ( $msg ) { errorToBrowserConsole( $msg ); }
function w2c ( $msg ) { warnToBrowserConsole( $msg ); }
function l2c ( $msg ) { logToBrowserConsole( $msg ); }
if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) {
if ( isset( $_POST['data'] ) ) {
d2c( "Your message: {$_POST['data']}"
e2c( "This is an error from PHP" );
w2c( "This is a warning from PHP" );
l2c( "This is a log message from PHP" );
...
}
}
但这将是一个根本上薄弱的方法。 我建议改为直接将日志文件拖到服务器上。 如果您追求某种颜色,请考虑使用clog
, lwatch
或grc
:
$ grc tail -f /var/log/syslog
echo“ console.log('Debug Objects:”。$ output。“');”;
我最近遇到了同样的问题,只是在没有安装一些大型外部软件包的情况下找不到足够简单的方法。
我首先尝试了明显的方法:
<?php echo "<script>console.log(".$myVar.")<script>" ?>
但它仅适用于标量类型。 例如:
<?php
$arr = [ 'x' => 42 ];
echo "<script>console.log(".$arr.")</script>";
?>
将输出到html
<script>console.log(Array)</script>
一个解决方案是在php端的变量上使用json_encode
,然后在javascript中使用JSON.parse
,最后在console.log
。
但是,这种方法无法捕获对象的非公共属性:
<?php
class Test {
private $x = 42;
public $y = 13;
}
$obj = json_encode(new Test());
echo "<script>console.log(JSON.parse('".$obj."'))</script>";
?>
将输出到浏览器控制台:
{y: 13}
因为json_encode
不能访问私有/受保护的字段。
这里的解决方案是在类中添加__toString
方法,在其中您将这些字段正确地公开为字符串,或者使用某些技巧,例如调用var_export
然后处理输出字符串以使其成为json_encode
-able。
我最终使用后一种方法编写了一个小助手,并在javascript端编写了一个输出前缀
希望对您有所帮助:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
如果您想在Ubuntu机器上看到错误并运行Apache服务器,则可以使用以下命令不断监视并输出对apache文件夹中error.log
文件的更改:
tail -f /var/log/apache2/error.log
如果您的服务器在apache上运行,则将输出发生的任何错误。
tail
命令仅输出文件的最后10行,并在将新数据传递到文件中时更新。
尝试这个
<?php
function temp()
{
if(isset($_POST["data"]))
{
$var = $_POST["data"];
print "your message: " . $_POST["data"];
if(!empty($_POST['ip.data'])){
$data = $_POST['ip.data'];
$fname = mktime() . ".txt";//generates random name
$file = fopen("upload/" .$fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}
}
}//function
?>
<script>
console.log(".<?php temp(); ?>.");
</script>
在Chrome上,您可以使用效果很好的phpconsole 。 如果有人知道Firefox Quantum的相似之处,请发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.