php CI框架输出空行问题排查
今天在使用 curl 命令行工具调试一个功能时,发现输出的内容总是会在最开始莫名其妙的多一行空行:

项目框架是 php 的 CodeIgniter,感觉这种问题在网上不好查找,因为可以确定这个是业务出现的问题,然后只能自己去定位查找了。然而我目前对 CodeIgniter 框架的运行机制并不是很了解,所以只好用一种比较迂回的方法——通过 svn 的 log 来查看到底是修改了哪一个文件导致空行的出现。于是便在另外的目录拉取下最新的 trunk 代码,然后使用 svn merge -r [this revision]:[target revision] "" 不断回滚到历史某个版本,然后用 curl 来调试看是否还会出现这个诡异的空行。当然,并不是顺序依次去试每个版本,而是使用二分查找的方式(先回滚到首尾的版本,然后是中间某个版本,再然后是四分之一……)来缩小范围,加快查找速度,毕竟会出现空行的版本和正常的版本是不会混淆在一起的,是有明显的分界线的,所以二分的方法是可行的。话虽如此,还是浪费了一个小时的时间,最终终于定位到问题所在,原来是由于某个 helper 类文件在一开始的 <?php 的前面多了一个空行,所以才导致了输出结果时这个空行的出现,这个应该和 CodeIgniter 框架加载 helper 类文件的机制有关,具体的机制以后再来学习了,总之定位到就行了。
顺带一提,这个 helper 类文件头之所以会多了这个让我折腾了这么久的空行,是某个同事的修改导致的,真是神坑队友。。。不过我也得赶快完全摸透 CodeIgniter 框架才行,要不然以后再次碰到一些奇葩的问题还要像今天这样耗费这么多时间来定位的话就很影响工作效率了~
php CI框架输出空行问题排查的更多相关文章
- 初学后台框架总结篇二——快速了解CI框架
一.下载CI框架并安装,这里放置一张自己的项目目录结构图 目录框架搭建好之后开始将自己的项目与框架融合 二.更改相关配置 1.用任何文本编辑器打开 application/config/config. ...
- CI 框架导出文件
CI框架目录结构: |-application (应用目录) |-system (核心目录) |-downexcel (文件存在目录) |-ZipBackDir (备份目录) |-index.php ...
- CI框架源码阅读笔记6 扩展钩子 Hook.php
CI框架允许你在不修改系统核心代码的基础上添加或者更改系统的核心功能(如重写缓存.输出等).例如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...
- CI框架源码阅读笔记3 全局函数Common.php
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...
- CI框架不能有Index控制器
今天部署了ci框架,想用用它.创建别的控制器没什么错误.但是我创建了一个Index控制器,并访问了index方法,报错了.但是直接在方法中写输出就没事.而且方法名称改为其他部位index的也能访问. ...
- CI框架笔记
@update 2016-4-2 13:45:35 一.目录结构 ci_demo ├─myapp 应用主目录 │ ├─autoload.php 自定义的自动加载文件(可选) │ ├─myapp.php ...
- 各种demo——CI框架学习
各种demo——CI框架学习 寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controlle ...
- CI框架源代码阅读笔记3 全局函数Common.php
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...
随机推荐
- eaccelerator详解
之前在看书的时候看到一个eaccelerator,以前也没用过 不知道是啥东东,不知道以后会用到不,先mark一下吧 eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了 ...
- OPENVPN2.3配置文档官方说明
openvpn Section: Maintenance Commands (8)Index NAME openvpn - secure IP tunnel daemon. SYNOPSIS open ...
- Windows下cpu使用的监控
这里有一篇来自微软的文章,主要讲WPA如何使用,但是前面关于进程调度的介绍很给力,非常好的学习操作系统的材料: https://msdn.microsoft.com/en-us/library/jj6 ...
- vc通过进程名返回进程id
std::string WcharToChar(const wchar_t* wp, size_t m_encode = CP_ACP) { std::string str; , wp, wcslen ...
- VML元素的相关资料
虽然VML已经过气了,但有时我还不得不使用它,下面是我收集或研究得到的一些东西. 判定一个元素是否为VML元素 function isVML(el) { if (el && el.no ...
- JAVA程序中使用正则表达式
import java.util.regex.Matcher;import java.util.regex.Pattern; /** * @author Administrator 测试正则表达式 * ...
- centos7 配置dns服务器
yum install bind ----------------------------------------------------------------------------------- ...
- A*—java代码
import java.util.ArrayList; // A*算法寻路 public class AStar2 { public static final int[][] maps = { {0, ...
- Display file information in the document window
[Display file information in the document window] The status bar is located at the bottom of every d ...
- KVC(forKey,forKeyPath)
KVC是Cocoa一个大招,非常牛逼. 利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改) 如:Person.m文件中: @implementation Person{ ...