摘要: 原文:https://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html 欢迎来到”给PHP开发者的PHP源码”系列的第四部分,这一部分我们会谈论PHP数组在内部是如何表示和在代码库里使用的。 为了防止你错过了之前的文章,以下是链接: 第一部分:给PHP开发者的PHP源码-源码结构 第二部分:理解PHP内部函数的定义 第三部分:PHP的变量实现 阅读全文
posted @ 2016-02-24 17:33 hoohack 阅读(322) 评论(0) 推荐(1) 编辑
摘要: 在PHP的核心代码中,变量被称为ZVAL。这个结构之所以那么重要是有原因的,不仅仅是因为PHP使用弱类型而C使用强类型。那么ZVAL是怎么解决这个问题的呢?要回答这个问题,我们需要认真的查看ZVAL类型的定义。要查看这个定义,让我们尝试在lxr页面的定义搜索框里搜索zval。乍一眼看去,我们似乎找不到任何有用的东西。但是有一行typedef在zend.h文件(typedef在C里面是一种定义新的数据类型的方式)。这个也许就是我们要找的东西,再继续查看。原来,这看起来是不相干的。这里并没有任何有用的东西。但为了确认一些,我们来点击_zval_struct这一行。 阅读全文
posted @ 2016-02-24 17:28 hoohack 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 欢迎来到"给PHP开发者的PHP源码"系列的第二部分。 在上一篇中,ircmaxell说明了你可以在哪里找到PHP的源码,它的基本目录结构以及简单地介绍了一些C语言(因为PHP是用C语言来写的)。如果你错过了那篇文章,在你开始读这篇文章之前也许你应该读一下它。 在这篇文章中,我们谈论的是定位PHP内部函数的定义,以及理解它们的原理。 阅读全文
posted @ 2016-02-16 09:29 hoohack 阅读(480) 评论(0) 推荐(0) 编辑
摘要: 作为一个开发者,我发现在我的日常工作中越来越多地查看PHP的源码。在为了弄清楚奇怪的边界问题和为什么某些问题应该发生的却没有发生而去理解背后究竟发生了什么事情的时候非常有用。在文档缺失、不完整或者错误的情况下也很有用。因此,我已经决定通过一系列的文章来分享我学到的知识,给予PHP开发者们足够的知识去真正阅读PHP的C语言源码。你并不需要有C语言的基础(我们会总结一些基础),但如果有的话会更有帮助。 阅读全文
posted @ 2016-02-12 09:45 hoohack 阅读(858) 评论(0) 推荐(0) 编辑
摘要: 使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一个拥有唯一值的数组。这个函数大多数情况下都能工作得很好。但是,如果你尝试在一个大的数组里使用array_unique()函数,它会运行地慢一些。 有一个比较好而且更快的函数array_flip()来替代使用array_unique()函数来创建唯一的数组。这个魔法般的函数会交换数组里面每一个元素的键和值,因为键值必须唯一,因此,你会得到跟array_unique()函数一样的结果。 阅读全文
posted @ 2016-01-19 11:27 hoohack 阅读(401) 评论(4) 推荐(1) 编辑
摘要: 里面说到是否会去使用PHP7,就个人而言,我是毫不犹豫地使用的,但是生产环境就不是我说了算,所以只能自己在自己的开发环境里更新PHP的版本。那么,你呢? 笔者使用的是Linux的openSUSE42.1发行版,Yast里面还没有PHP7的安装包,于是乎只能自己手动编译安装了。作为一个PHP开发者,我是非常希望能够学会编译安装PHP7的,之前试过几次,但是每次安装都要上网找各种资料,于是乎,这次安装成功后就想把自己的安装过程以及遇到的问题记录下来,方便以后查阅和分享给需要的人。 阅读全文
posted @ 2015-12-24 12:21 hoohack 阅读(689) 评论(1) 推荐(1) 编辑
摘要: 最近在使用PHP重写一个使用JAVA写的项目,因为需要查看之前的项目,所以要在本地搭建一个Tomcat来跑JAVA的项目。搭建成功后,因为Tomcat监听的端口是8080,因此,访问的URL前缀是localhost:8080,每次访问项目的时候都要先输入这一串内容,感觉比较繁杂,所以想着将其变成localhost来访问,但是这样的话就是访问80端口了,要达到目的,就得做端口转发。笔者见识比较少,暂时想到的是使用Nginx/Apache等程序做转发。如果有更好的方案,欢迎指教。 阅读全文
posted @ 2015-12-11 14:35 hoohack 阅读(6376) 评论(1) 推荐(1) 编辑
摘要: 开发前的准备 安装Linux系统(Ubuntu14.04),在VMWare虚拟机下安装一个Ubuntu; 安装PHP5.6或以上版本; 安装curl、pcntl扩展。 阅读全文
posted @ 2015-09-28 10:03 hoohack 阅读(7103) 评论(14) 推荐(23) 编辑
摘要: 在第一次使用了唯一索引(u_id)的时候,InnoDB使用了唯一索引作为表的聚簇索引。而在InnoDB存储引擎中,count(*)函数是先从内存中读取表中的数据到内存缓冲区,然后扫描全表获得行记录数的。因此,使用唯一索引作为聚簇索引的时候,InnoDB需要先读取110W条的数据到数据缓冲区中,这里发生了很多次I/O,因此造成了主要的时间消耗。而添加了辅助索引后,mysql在执行查询时会使用内部的优化机制:即使用辅助索引来统计数量。辅助索引保存的是index的值,此时只需要读取一个字段,I/O减少了,因此性能就提高了。 阅读全文
posted @ 2015-09-24 11:38 hoohack 阅读(3600) 评论(7) 推荐(5) 编辑
摘要: PHP服务的启动。严格来说,PHP的相关进程是不需要手动启动的,它是随着Apache的启动而运行的。当然,如果有需要重启PHP服务的情况下也是可以手动重启PHP服务的。比如说在有开启opcode的正式环境更新了代码之后,需要重启PHP以重新编译PHP代码。 从宏观上来看,PHP内核的实现就是接收输入的数据,内部做相应的处理然后输出结果。对于PHP内核来说,我们编写的PHP代码就是内核接收的输入数据,PHP内核接收代码数据后,对我们编写的的代码进行代码解析和运算执行,最后返回相应的运算结果。 然而,不同于平时的C语言代码,要执行PHP代码,首先需要将PHP代码“翻译”成机器语言来执行相应的功能。而要执行“翻译”这个步骤,就需要PHP内核进行:词法分析、语法分析等步骤。最后交给PHP内核的Zend Engine进行顺次的执行。 阅读全文
posted @ 2015-09-07 11:02 hoohack 阅读(990) 评论(1) 推荐(1) 编辑
摘要: AJAX全称 Asynchronous JavaScript and XML(异步的JavaScript 和XML) 阅读全文
posted @ 2015-09-06 18:21 hoohack 阅读(225) 评论(0) 推荐(0) 编辑
摘要: CHAR与VARCHAR类型类似,但它们保存和检索的方式不同。CHAR有固定的长度,而VARCHAR属于可变长的字符类型。它们最大长度和是否尾部空格被保留等方面也不同。在存储和检索过程中不进行大小写转换。 阅读全文
posted @ 2015-09-02 09:47 hoohack 阅读(426) 评论(3) 推荐(0) 编辑
摘要: 两者的区别在于TCP接收的是一堆数据,而每次取多少由主机决定;而UDP发的是数据报,客户发送多少就接收多少。 阅读全文
posted @ 2015-08-31 10:05 hoohack 阅读(5992) 评论(0) 推荐(3) 编辑
摘要: 在Linux操作系统中,有时候跟着教程安装了一些软件,安装成功后,很高兴的准备运行该软件相应命令,但是偶尔会遇到”Command not found…“的提示。原因是因为你安装的软件需要设置环境变量才能运行。 阅读全文
posted @ 2015-08-26 16:16 hoohack 阅读(831) 评论(0) 推荐(0) 编辑
摘要: 第一章 减少HTTP请求 使用图片地图:当导航栏包含多张图片时,可以将其合并成一张图片,再通过计算位置触发不同的链接 CSS sprites:将图标合并,引入一张背景图,通过CSS控制其位置 内联图片:将图片编码后再放到data后面。可用PHP的base64_encode对图片文件进行编码。 合并脚本和样式文件:理想情况下一个页面一个CSS文件 阅读全文
posted @ 2015-08-25 10:59 hoohack 阅读(508) 评论(0) 推荐(1) 编辑