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 ...
随机推荐
- LeetCode OJ:Search a 2D Matrix(二维数组查找)
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- 2017.11.4 Datasheet 查找替代料
- Django和pymysql搭建学员管理系统
学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...
- Leetcode 999. Available Captures for Rook
class Solution: def numRookCaptures(self, board: List[List[str]]) -> int: rook = [0, 0] ans = 0 f ...
- H5 pattern
pattern:正则表达式验证 例如: <input pattern="1[3578]\d{9}"> 可以省略^和$ 必须和required配合使用,否则在用户没有输 ...
- js类 的小例子
class Flyer { constructor(fname, speed) { this.fname = fname; this.speed = speed; } fly(){ console.l ...
- 如何在公司Http代理后使用NuGet官方源
文章转自CSDN 霍力强的专栏 有些公司上网使用的是Http代理.默认情况下,VS是无法访问外部网络的.如果要使用NuGet,通常只能在局域网里架一个自己的NuGet服务器.但这种方法不论是packa ...
- boost 部分编译
完整编译boost库需要很长时间,而且我们不一定会用到所有的库. 那么如何只编译只需要的库呢? 解压boost源码,进入解压后的目录 ./bootstrap.sh生成bjam ./bjam --bui ...
- 【英语】Bingo口语笔记(81) - wear系列
- 拦截器springmvc防止表单重复提交【3】自己实际项目
1:[定义注解] package com.jspxcms.ext.interceptor; import java.lang.annotation.ElementType; import java.l ...