如何在Chrome或Firefox中“控制日志”PHP代码?

时间:2018-02-19 03:24:56

标签: php google-chrome 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"];的输出或Chrome或Firefox中的任何错误。我试过Firefox Quantum应该可以调试php吗?无论如何,我如何控制日志?

7 个答案:

答案 0 :(得分:4)

第一步是认识到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" );
        ...
    }
}

但这将是一种从根本上薄弱而脆弱的方法。我建议直接在服务器上拖尾日志文件。如果您使用某种颜色,请考虑使用cloglwatchgrc

$ grc tail -f /var/log/syslog

答案 1 :(得分:1)

echo&#34; console.log(&#39;调试对象:&#34;。$ output。&#34;&#39;);&#34;;

答案 2 :(得分:1)

我最近遇到了同样的问题,只是没有安装一些大型外部软件包就找不到足够简单的方法。

我首先尝试了明显的方法:

<?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然后处理输出字符串以使其成为{{ 1}}。

我最终使用后一种方法编写了一个小助手,并在javascript端编写了输出前缀

如果有人想使用链接here,请留下它。

答案 3 :(得分:0)

我希望能提供帮助:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

答案 4 :(得分:0)

如果您想查看Ubuntu计算机上的错误并运行Apache服务器,可以使用以下命令持续监视并输出对apache文件夹中error.log文件的更改:

tail -f /var/log/apache2/error.log

如果您在apache上运行服务器,那么这将输出发生的任何错误。

tail命令只输出文件的最后10行,并在将新数据传送到文件时进行更新。

答案 5 :(得分:0)

试试这个

  <?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>

答案 6 :(得分:0)

在Chrome上,您可以使用效果很好的phpconsole。 如果有人知道Firefox Quantum类似的东西请发表评论。