php瀏覽器端調試輸出方法


 1、利用js打印到瀏覽器控制台
<?php
function console_log($data)
{
    if (is_array($data) || is_object($data))
    {
        echo("<script>console.log('".json_encode($data)."');</script>");
    }
    else
    {
        echo("<script>console.log('".$data."');</script>");
    }
}
其實質上就是在頁面里加入了一段javascript的腳本,利用 console.log() 函數輸出信息到控制台,如上方法打印出來都是字符串形式,如果將單引號去掉,PHP的數組和對象將以JS對象的方式打印出來,即echo("<script>console.log(".json_encode($data).");</script>");,究竟使用哪一種看你喜歡的方式了。

如上就是最簡單的實現方式了,但這么做有一點不太好,就是輸出的很凌亂,如果你在不同的位置都調用了該函數,那么在頁面的各個位置都將插入一段<script>,雖說JS在頁面幾乎任何位置都可以,但我們可以有更好的辦法,將所有數據統一到一處輸出:

<?php
//注冊一個shutdown函數,如果不這么做的話記得在程序最后echo Console_log::fetch_output();
register_shutdown_function('my_shutdown');
 
function my_shutdown()
{
    echo Console_log::fetch_output();
}
 
class Console_log {
    private static $output = '';
    static function log($data)
    {
        if (is_array($data) || is_object($data))
        {
            $data = json_encode($data);
        }
        ob_start();
        ?>
        <?php if (self::$output === ''):?>
        <script>
        <?php endif;?>
        console.log('<?=$data;?>');
        <?php
        self::$output .= ob_get_contents();
        ob_end_clean();
    }
    static function fetch_output()
    {
        if (self::$output !== '')
        {
            self::$output .= '</script>';
        }
        return self::$output;
    }
}

Console_log::log(array(1,2));
echo '111111';
Console_log::log('test');
 2、利用頁頭信息輸出調試數據
<?php
function console_log($data)
{
    if (is_array($data) || is_object($data))
    {
        echo("<script>console.log('".json_encode($data)."');</script>");
    }
    else
    {
        echo("<script>console.log('".$data."');</script>");
    }
}

function callback($buffer)
{
  // replace all the apples with oranges
 
  //header("debug_data: ".json_encode('1=2'));
  //return (str_replace("1=2", "", $buffer));
    $regex4="/<div class=\"warn\".*?>(.*?)<\/div>/ism";
    if(preg_match_all($regex4, $buffer, $matches)){
       $ret = str_replace($matches[0][0], "", $buffer);
       header("debug_data: ".json_encode($matches[1][0]));
       $debug_data = json_encode($matches[1][0]);
    }else{
       $ret = $buffer;
    }
    return $ret;
}

register_shutdown_function('my_shutdown');

function my_shutdown()
{
    console_log('debug');
}

ob_start("callback");

?>
<html>
<body>
<?php $title = "1111"; ?>
<div class="warn" style="display:block">$title=<?php echo $title;?></div>
<p>It's like comparing apples to oranges.</p>
</body>
</html>

 3、 firebug+firephp+FirePHP庫調試PHP原理
FirePHP工具通過將調試信息輸出到http響應頭,然后firephp插件分析響應頭字符串輸出相應調試信息
 4、修改http請求頭,后台根據$_SERVER['HTTP_TEST_HEADER_NAME']設置判斷處理是否開啟調試模式,結合方法3 if (isset($_SERVER['HTTP_TEST_HEADER_NAME']) && $_SERVER['HTTP_TEST_HEADER_NAME'] == 'test-header-value'){ $firephp ->setEnabled(true); }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM