我们在开发APP的服务器端,当和APP进行联调时通常需要实时跟踪URL请求和参数的接收情况。

但PHP并没有像Python或Java专有的控制台输出函数,Python的print()和Java的System.out.println(),PHP的echo,print等函数在直接使用php -f index.php时,可以打印以shell屏幕上,但在cli_server运行时并不能满足把调试信息只打印在shell而不显示在浏览器。

用度娘搜了好久,网上对PHP内置server cli模式的资料少之又少,根本找不到一点有用的信息。

通过查阅PHP官方文档,最后想到PHP的标准输出流STDOUT

  php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区

当在cli模式下运行时,只要向STDOUT写入数据时,并不需要echo 或 print 就会立即 打印 到 SHELL客户端:

于是,我们可以编写一个自定义函数来封装对sdtout标准输出流的数据的入,相当于随时把想要显示的调度信息打印到shell:

 /*
* cli模式或者内置server打印调试信息,而不在浏览器输出
* param fixed $data 参数可以是除了对象以外的所有数据类型,比如:字符串,数组,jason等
*/
function console($data){
$stdout = fopen('php://stdout', 'w');
fwrite($stdout,json_encode($data)."\n"); //为了打印出来的格式更加清晰,把所有数据都格式化成Json字符串
fclose($stdout);
}

当需要在内置Server每一个请求后,打印当前的调试信息时:直接调用console()即可

比如:

  打印所有接收到的GET或POST参数:

  console($_GET);

  console($_POST);

  

  打印字符串:

  console("hello php console debug");

  

以后再也不用羡慕Python和Java的控制台输出,PHP从此也有控制台输出函数了

PHP内置Web Server探究(二)自定义PHP控制台输出console函数的更多相关文章

  1. PHP内置Web Server探究(一)启动Cli_Server

    自PHP5.4之后 PHP内置了一个Web 服务器(cli_server),类似于Python的内置server一样,方便我们开发阶段的调试 主要使用场景: 1,没有搭建nginx或apache等第三 ...

  2. 内置Web Server

    在终端输入命令:php -S localhost:8000 -t xxx(某个目录或文件) 这个内置的Web服务器主要用于本地开发使用,不可用于线上产品环境. URI请求会被发送到PHP所在的的工作目 ...

  3. php CLI SAPI 内置Web Server

    PHP 5.4.0起, CLI SAPI 提供了一个内置的Web服务器. 这个内置的Web服务器主要用于本地开发使用,不可用于线上产品环境. URI请求会被发送到PHP所在的的工作目录(Working ...

  4. PHP本地开发利器:内置Web Server

    PHP 5.4.0起, CLI SAPI 提供了一个内置的Web服务器. 命令:php -S 这个内置的Web服务器主要用于本地开发使用,不可用于线上产品环境. URI请求会被发送到PHP所在的的工作 ...

  5. php内置web server

    今天刚开始正式学习PHP(之前有一点了解),推荐学习的网站是w3school.一开始不知道tomcat服务器不支持PHP脚本,直接把.php文件放到tomcat里面去运行,结果嵌入的php代码段没有什 ...

  6. 浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】

    原文:浏览器扩展系列----给MSTHML添加内置脚本对象[包括自定义事件] 使用场合: 在程序中使用WebBrowser或相关的控件如:axWebBrowser等.打开本地的html文件时,可以在h ...

  7. 《Python高效开发实战》实战演练——内置Web服务器4

    <Python高效开发实战>实战演练——开发Django站点1 <Python高效开发实战>实战演练——建立应用2 <Python高效开发实战>实战演练——基本视图 ...

  8. Spark2.1.0——内置Web框架详解

    Spark2.1.0——内置Web框架详解 任何系统都需要提供监控功能,否则在运行期间发生一些异常时,我们将会束手无策.也许有人说,可以增加日志来解决这个问题.日志只能解决你的程序逻辑在运行期的监控, ...

  9. PHP 5.4 内置 web 服务器

    之前 OSC 翻译了一篇文章:在 Windows 上使用 PHP 5.4 内置的 Web 服务器 下面这篇文章来自外刊IT评论翻译的在 Linux 下使用 PHP 5.4 内置 Web 服务器 PHP ...

随机推荐

  1. ssh公钥自动登陆

    第一步,在服务器上安装ssh服务 sudo apt-get install ssh 通过ssh -v查看是否安装成功 第二步创建本地公钥秘钥对 ssh-keygen -t rsa  //创建ssh公钥 ...

  2. Entity Framework with MySQL 学习笔记一(验证标签)

    直接上代码 [Table("single_table")] public class SingleTable { [Key] public Int32 id { get; set; ...

  3. .Net框架与框架类库-转

    http://blog.csdn.net/rrrfff/article/details/6686493 .NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework类 ...

  4. Altium Designer 画"差分线"

    如何在 Altium Designer 中快速进行差分对走线1:在原理图中让一对网络前缀相同,后缀分别为_N 和_P,并且加上差分队对指示.    让一对差分网络名称的前缀必须相同,后缀分别为_N 和 ...

  5. COJ 0260 HDNOIP201204四个国王

    HDNOIP201204四个国王 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在N*M的棋盘上摆国际象棋中的“国王”.如果两 ...

  6. BZOJ3297: [USACO2011 Open]forgot

    3297: [USACO2011 Open]forgot Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 54  Solved: 38[Submit][ ...

  7. Linux系统编程(36)—— socket编程之UDP详解

    UDP 是User DatagramProtocol的简称,中文名是用户数据报协议.UDP协议不面向连接,也不保证传输的可靠性,例如: 1.发送端的UDP协议层只管把应用层传来的数据封装成段交给IP协 ...

  8. android调用系统自带的的浏览器搜索关键字

    //调用系统的浏览器搜索详情 public void jumpBrowser(String value) { /* 取得网页搜寻的intent */ Intent search = new Inten ...

  9. 程序设计实习MOOC / 继承和派生——编程作业 第五周程序填空题1

    描述 写一个MyString 类,使得下面程序的输出结果是: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8 ...

  10. Git分支学习总结

    思维导图:        总结:        Git分支:分为2类合计为5种分支.        第一类:主分支和开发分支.        第二类:特性分支,热补丁分支,版本分支.