添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
echo ''; exit;
可是直接打印出来有可能会干扰你的页面,打乱布局,影响作为Api返回的数据等问题。这时我们可以采取将调试信息输出到文件的方式,如下是最简单的例子:
error_log(print_r($bar, true));

可是这种方式用来记录日志还合适,用到调试时终究还是不太方便。此时我们可以利用现代浏览器的控制台,比如Chrome Console(Win快捷键 Ctrl+Shift+J),将内容输出到Console里,就可以解决这个问题了。

现在已经有一些这样的工具了,比如说 PHP-Console 或者 Chrome Logger ,前者针对PHP,后者支持多种服务端语言,使用方式都是先安装一个Chrome扩展,然后提供服务端的库供调用。实现方式大致是利用Session,Cookies等来传递数据。

如上是比较完善的解决方式,都提供了丰富的功能。但如果只是想要一个简单的,可用的,不用安装扩展程序的方式来解决这个问题,那么可以这么来做:

function console_log($data) if (is_array($data) || is_object($data)) echo("<script>console.log('".json_encode($data)."');</script>"); echo("<script>console.log('".$data."');</script>");
其实质上就是在页面里加入了一段javascript的脚本,利用 console.log() 函数输出信息到控制台,如上方法打印出来都是字符串形式,如果将单引号去掉,PHP的数组和对象将以JS对象的方式打印出来,即 echo("<script>console.log(".json_encode($data).");</script>"); ,究竟使用哪一种看你喜欢的方式了。

如上就是最简单的实现方式了,但这么做有一点不太好,就是输出的很凌乱,如果你在不同的位置都调用了该函数,那么在页面的各个位置都将插入一段<script>,虽说JS在页面几乎任何位置都可以,但我们可以有更好的办法,将所有数据统一到一处输出:

//注册一个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;?>'); 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的输出控制缓冲函数来将数据保存下来,最后一次全部输出。 当我们的PHP程序Debug时,比较常用的方式是将变量的信息打印到浏览器中,例如这样:<?phpecho '';print_r($bar);echo '';exit;可是直接打印出来有可能会干扰你的页面,打乱布局,影响作为Api返回的数据等问题。这时我们可以采取将调试信息输出到文件的方式,如下是最简单的例子:error_log(print_r($bar, true));可是 本篇博客主要在于教学如何使用chrome 浏览器 对代码 进行 调试,对于遇见bug的时候能更快的找到并处理。如果你是前端小白,不太会调试,可以看看哦。当然希望大家写代码永不遇见BUG,哈哈。废话不多说,开搞。 F12打开 控制台 ,选择sources 找到你写代码的文件 设置断点(观察你需要 进行 的数据的时刻变化),设置方式很简单,只需要单击下对应行号就行了。 我这里写了个按钮事件,单击减少值得变化,对应不同值进入不同的if条件里面,让我们来看看吧 let num1 = 100 清泉Kikyō: 我想知道为什么我地址为“http://127.0.0.1:8020/traffic/server/kk_heat_line.php?kkid=510704530011005000”时页面输出的为:“console.log( . json_encode($results) . ); '; } ?>”,控制台没有输出。 对应的kk_heat_line.php代码为: $kkid = $_GET["kkid"]; header("Content-Type: text/html; charset=utf-8"); $connect = mysqli_connect('localhost:3306','root','','my_traffic') or die('Unale to connect'); $sql = "select dir, day(date)*24 + hour(date), count(*) from kk_record where kkid = '$kkid' group by dir, day(date), hour(date)"; $results = array(); $result = mysqli_query($connect,$sql); while($row = mysqli_fetch_row($result)){ $results[] = $row; function console_log($results) { echo '<script type="text/javascript"> console.log(' . json_encode($results) . '); </script>'; 解决windows下Composer因php_openssl扩展缺失而安装失败的问题 陶孩孩子一枚: 其实并不是一定这样,你应该去修改环境变量中是那个php版本对应下面的php.ini的exension=php=openssl.dll。一般我们都是用php的集成配置环境,所以一般有安装好几个php版本可以切换。composer更新文件或者下载文件时有的类库确实要求你的php版本得有5.5或以上。所以你切换了版本,那个php.ini也切换了。 CSDN博客迁移到markdown博客系统的工具 夜舞倾城: 今天刚试了下,改完地址后还会报错,不会PHP看不懂……