利用瀏覽器控制台(Console)進行PHP Debug____PHP

來源:互聯網
上載者:User

當我們的PHP程式Debug時,比較常用的方式是將變數的資訊列印到瀏覽器中,例如這樣:

<?phpecho '<pre>';print_r($bar);echo '</pre>';exit;

可是直接列印出來有可能會干擾你的頁面,打亂布局,影響作為Api返回的資料等問題。這時我們可以採取將調試資訊輸出到檔案的方式,如下是最簡單的例子:

error_log(print_r($bar, true));

可是這種方式用來記錄日誌還合適,用到調試時終究還是不太方便。此時我們可以利用現代瀏覽器的控制台,比如Chrome Console(Win快速鍵 Ctrl+Shift+J),將內容輸出到Console裡,就可以解決這個問題了。

現在已經有一些這樣的工具了,比如說 PHP-Console 或者Chrome Logger ,前者針對PHP,後者支援多種服務端語言,使用方式都是先安裝一個Chrome擴充,然後提供服務端的庫供調用。實現方式大致是利用Session,Cookies等來傳遞資料。

如上是比較完善的解決方式,都提供了豐富的功能。但如果只是想要一個簡單的,可用的,不用安裝擴充程式的方式來解決這個問題,那麼可以這麼來做:

<?phpfunction 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;    }}

注意如上使用<?=來代替<?php echo ,需要在php.ini中開啟Short_open_tag=On。這段代碼就是利用php的輸出控制緩衝函數來將資料儲存下來,最後一次全部輸出。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.