随笔分类 - PHP
摘要:一次冗长繁琐的排错经历 白白忙活了一个下午+半个早饭的时间。感慨一下, 解决问题的思路很重要啊,否者就会像无头苍蝇一样,到处乱撞。 因项目关系,需要在测试环境中开启https,悲剧的是,在经过了机器迁移之后,之前可用的https连接失败了: 而Nginx中也只有寥寥几行的错误日志: 这里首先说明一下
阅读全文
摘要:前言– 追寻大牛的足迹,无处不在的“性能”问题。 最近在读郭欣大牛的《构建高性能Web站点》,读完收益颇多。作者从HTTP、多级缓存、服务器并发策略、数据库、负载均衡、分布式文件系统多个方面娓娓道来,洋洋洒洒,甚是精彩,想来让人心旷神怡。 但“纸上得来终觉浅,绝知此事要躬行”,要消化本书的内容,绝...
阅读全文
摘要:切,一个字符串有什么好研究的。别这么说,看过《平凡的世界》么,平凡的字符串也可以有不平凡的故事。试看:(1) 在C语言中,strlen计算字符串的时间复杂度是?PHP中呢?(2) 在PHP中,怎样处理多字节字符串?PHP对unicode的支持如何?同样是字符串,为什么c语言与C++/PHP/Java...
阅读全文
摘要:时刻提醒自己,不进步意味着倒退。2015年准备读完的技术书籍:1. 《Redis设计与实现》2. 《高可用MySQL:构建健壮的数据中心》3. 《高性能Mysql》4. 《深入浅出Node.js》5. 《算法 第4版 Algorithms Fourth Edition》6. 《深入PHP:面向对象、...
阅读全文
摘要:年前因为工作比较饱和,现在又忙着换工作的事情,基本停止了对博文的更新。后续的博文,还是慢慢补上吧。为了不至于过于发散,先搞个未成形的大纲,如下: PHP内核探索之变量 不平凡的字符串 PHP内核探索之变量 变量的生命周期、类型转换 PHP内核探索之变量 变量的循环(foreach,其实放到Ze...
阅读全文
摘要:这次说说session. session可以说是当前互联网提到的最多的名词之一了。它的含义很宽泛,可以指任何一次完整的事务交互(会话):如发送一次HTTP请求并接受响应,执行一条SQL语句都可以看做一次Session。如无特殊说明,本文中提到的Session单指HTTP会话。本文是PHP内核探...
阅读全文
摘要:上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用的函数系列-数组操作的相关函数做进一步的跟踪。本文主要内容:PHP中提供的数组操作函数数组操作函数的实现结语参考文献一、PHP中提供的数组操作函数...
阅读全文
摘要:在PHP中,除了zval, 另一个比较重要的数据结构非hash table莫属,例如我们最常见的数组,在底层便是hash table。除了数组,在线程安全(TSRM)、GC、资源管理、Global变量、ini配置管理中,几乎都有Hash table的踪迹(上一次我们也提到,符号表也是使用Hash ...
阅读全文
摘要:本文主要内容:引论符号表与zval引用原理回到最初的问题一、引论 很久之前写了一篇关于引用的文章,当时写的寥寥草草,很多原理都没有说清楚。最近在翻阅Derick Rethans(home: http://derickrethans.nl/ Github: https://github.com/de...
阅读全文
摘要:作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字、数组、字符串、对象还是其他,因而可以说变量是构成语言的不可或缺的基础。本文是PHP内核探索之变量的第一篇,主要介绍zval的基本知识,包括如下几个方面的内容:Zval的基本结构查看zval的方法:debug_zval_dump和xdebu...
阅读全文
摘要:本篇并不是对某一组件的详细源码分析,而只是简单的跟踪了下CI的autoload的基本流程。因此,可以看做是Loader组件的分析前篇。CI框架中,允许你配置autoload数组,这样,在你的应用程序初始化时,会自动加载相应的类库,例如,在application/config/autoload.php...
阅读全文
摘要:最近时间有些紧,源码阅读系列更新有些慢。鉴于Controller中代码比较少,本次Blog先更新该文件的源码分析。 在经过路由分发之后,实际的应用Controller接管用户的所有请求,并负责与用户数据的交互。CI中所有的应用控制器都应该是CI_Controller的子类(除非你扩展了CI的核...
阅读全文
摘要:一个灵活可控的应用程序中,必然会存在大量的可控参数(我们称为配置),例如在CI的主配置文件中(这里指Application/Config/Config.php文件),有如下多项配置:$config['base_url'] = 'http://test.xq.com';$config['index...
阅读全文
摘要:CI框架允许你在不修改系统核心代码的基础上添加或者更改系统的核心功能(如重写缓存、输出等)。例如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = TRUE;),通过添加特定的钩子,可以让系统在特定的时刻触发特定的脚本:$hook['post_...
阅读全文
摘要:上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的。这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架。 从本篇开始,将进一步去分析各组件的实现...
阅读全文
摘要:到了这里,终于进入CI框架的核心了。既然是“引导”文件,那么就是对用户的请求、参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位。例如,用户的请求url:http://you.host.com/usr/reg经过引导文件,实际上会交给Application中的UsrController...
阅读全文
摘要:从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现、结构和设计。 Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作)。 打开Common.php中,第一行代...
阅读全文
摘要:上一节(CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考:作为CI框架的入口文件,源码阅读,自然由此开始。在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现。1. 设置应用程序环境define('ENVIRON...
阅读全文
摘要:最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动。最近项目少,总算是有了一些时间去写一些东西。于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛!基本术语说明 在本文开始之前,有必要对文中...
阅读全文