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); }
php浏览器端调试输出方法的更多相关文章
- Chrome浏览器端调试JavaScript
1. 一个超级简单的html文件拉入chrome浏览器 2. 右键-->检查 3. 点击Sources 4. html的12行加个断点 5. 刷新页面,点开Console面板,输入变量num,我 ...
- 获取浏览器端的cookie方法
代码如下: function getCookie(key){ var cookies=document.cookie; if(cookies.length>0){ var start=cooki ...
- PHP在浏览器上跟踪调试的方法以及使用ChromePhp、FirePHP的简单介绍
之前用ThinkPHP时发现有个 trace 函数可以跟踪调试,感觉很有意思,网上搜索了下类似的东西,发现了 ChromePhp ,以前没想过这样来调试 PHP 程序,感觉非常方便,很有用. Thin ...
- PHP在浏览器上跟踪调试的方法以及使用ChromePhp、FirePHP的简介
之前用ThinkPHP时发现有个 trace 函数能够跟踪调试,感觉非常有意思.网上搜索了下类似的东西.发现了 ChromePhp ,曾经没想过这样来调试 PHP 程序.感觉非常方便,非常实用. Th ...
- 在PC上测试移动端网站和模拟手机浏览器的5大方法
在PC上测试移动端网站和模拟手机浏览器的5大方法 来源:互联网 作者:佚名 时间:03-19 10:14:54 [大 中 小] 最近公司要开发网站的移动版,让我准备准备知 ...
- 周记5——随机撒花特效、动态修改伪元素样式、contenteditable属性、手机端调试利器VConsole、浏览器端debug调试
记录一些小零碎知识点,以便日后查看~ 1.随机撒花特效 教师节快到了,公司的产品提出一个需求:在IM(即时聊天)聊天界面弹出教师节的祝福“广告”,用户点击“发送祝福”按钮,聊天界面会随机撒花.这里的重 ...
- 浏览器调试的必知必会,零基础足够详细-第一节console面板、移动端调试
前言 本文已经发布视频点击查看 开发过程中,浏览器的调试非常重要,可以说是必备的技巧,本文我就会分享一些自己掌握的技巧,欢迎补充 我们默认使用Chrome浏览器,但是你使用新edge浏览器也是可以的 ...
- 做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)
做web项目时,常常会遇到改动了代码,但浏览器端没有生效,原因是多种多样的,我会依据我遇到的情况逐步更新解决的方法 1.执行的时候採用debug模式,普通情况下使用项目部署button右边那个butt ...
- 做web项目时对代码修改后浏览器端不生效的应对方法(持续更新)
做web项目时,经常会遇到修改了代码,但浏览器端没有生效,原因是多种多样的,我会根据我遇到的情况逐步更新解决办法 1.运行的时候采用debug模式,一般情况下使用项目部署按钮右边那个按钮下的tomca ...
随机推荐
- SpringCloud分布式开发理解
谈到SpringCloud最新接触到的可能就是那五大"神兽",之前最先接触分布式开发是通过dubbo的RPC远程过程调用,而dubbo给我得感觉就是:虽然所有的主机物理上分布了,但 ...
- Ajax的跨域问题(包括解决方案)?
原因:js的同源策略限制,不同源会造成跨域 哪些情况会造成跨域? 子域名不同(WWW) 2.主域名不同(baidu.com) 3.端口号不同 4.IP地址和网址不同 解决方案: 使用jsonp技术,但 ...
- python----标准库概要
操作系统接口 os模块提供了不少与操作系统相关联的函数. >>> import os >>> os.getcwd() # 返回当前的工作目录 'C:\\Python ...
- 【数据库】python访问mysql
import MySQLdb 所有的数据库遵循相同的python database API 需要建立connection对象连接数据库,之后建立cursor对象处理数据. conn = MySQLdb ...
- 【SQL查询】查询结果翻译成其他值_decode
decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,.. ...
- 混用Application.LoadLevel 和 PhotonNetwork.LoadLevel
最近这一周从上周五晚上加完班回家夜里都12点了. 又赶紧送孩子去儿童医院 .. 就肺炎住院了. 真是有啥别有病呢. 悲剧的是我周三夜里陪了一夜后. 转天晚上也发烧了.. 周四 周五输了两天液. ...
- NGUI 学习使用
http://www.tasharen.com/forum/index.php?board=12.0
- Nginx 日志分析及性能排查
Nginx 日志分析及性能排查 2017-03-04 Linux爱好者 (点击上方公众号,可快速关注) 作者:-外星人- my.oschina.net/362228416/blog/844713 如有 ...
- Microsoft Office 2013 (64位) 免费完整版(安装 + 激活)
Microsoft Office 2013(Office 15)是微软的新一代Office办公软件,全面采用Metro界面.Microsoft Office 2013官方下载(Office2013专业 ...
- AtCoder Grand Contest 017 迟到记
晚上去操场上浪. 回来以后看到好几个人开着 \(AtCoder\) 在打代码. ... ... 今天有 \(AtCoder\) 比赛 ? 管它呢, \(Kito\) 在切西瓜,先吃西瓜... 然后看 ...