简介和安装配置AlternativePHPCache(APC)是一个开放自由的PHPopcode缓存。它的目标是提供一个自由、开放,和健全的框架用于缓存和优化PHP的中间代码。该扩展的各个版本安装包都在此处: http://pecl.php.net/package/apc.该PECL 扩展的 DLL 当前不可用。注意: 在Windows上,APC需要一个临时目录,并且Web服务器对这个目录可写,APC会检测TMP,TEMP,USERPROFILE这些Windows的环境变量,如果这些都没有,会检查系统...
继续阅读 >
分类:opcode
2014
11-07
11-07
PHP缓存篇:字节码缓存和对象缓存
PHP自身效率很高,但是执行创建远程连接、加载文件等操作时容易出现瓶颈,幸运的是,我们有很多工具来加速这部分操作,或减少这些耗时操作的执行次数。字节码缓存在一个PHP文件被执行时,它先被编译为字节码(也称opcode),然后这些字节码被执行。如果文件没有修改,那么字节码也会保持不变,这意味着编译这一步白白浪费了CPU资源。这就是引入字节码缓存的原因,通过把字节码保存在内存中来消除冗余的编译,重用它们完成后续的...
继续阅读 >
2014
11-07
11-07
PHP内核探索 —— 如何执行PHP脚本:Zend引擎是如何解释PHP脚本的
前面介绍了PHP的生命周期,PHP的SAPI,SAPI处于PHP整个架构较上层,而真正脚本的执行主要由Zend引擎来完成,这一小节我们介绍PHP脚本的执行。目前编程语言可以分为两大类:第一类是像C/C++,.NET,Java之类的编译型语言,它们的共性是:运行之前必须对源代码进行编译,然后运行编译后的目标文件。第二类比如PHP,Javascript,Ruby,Python这些解释型语言,他们都无需经过编译即可“运行”。虽然可以理解为直接运行,...
继续阅读 >
2014
11-07
11-07
PHP内核探索 —— PHP脚本的执行细节:PHP、C、汇编、机器码
众所周知,计算机的CPU只能执行二进制的机器码,每种CPU都有对应的汇编语言,汇编语言编译器将汇编语言翻译成二进制的机器语言,然后CPU开始执行这些机器码。汇编语言作为机器语言与程序设计者之间的一个层,给我们带来了很多方便,程序员不需要用晦涩的01数字来书写程序,当然人们并不满足这样的一个进步,于是在汇编语言之上又多了一个层——C语言,C语言更贴近人类熟悉的“自然语言”,程序设计者可以通过C语言编译器将C源代码...
继续阅读 >
2014
11-07
11-07
PHP内核探索 —— 操作码OpCode:计算机最终是执行这些OpCode
运行一段PHP代码主要有两个阶段:编译和执行。当然编译过程中还包括词法分析语法分析不同阶段和细节,这里我们将其作为一个整体。在这两个阶段之间,PHP代码会被编译成opcode,可以将其认为是引擎的一个中间语言,编辑阶段把PHP源码生成opcode,然后在执行阶段执行这些opcode。这篇文章将简单的介绍opcode。PHP代码编译之后会生成许多的op,每一个op都是一个zend_op类型的c变量。相关的定义可以在{PHPSRC}/Zend/zend_compile.h中...
继续阅读 >
2014
11-07
11-07
PHP内核探索 —— PHP里的opcode:Zend虚拟机中的指令
opcode是计算机指令中的一部分,用于指定要执行的操作,指令的格式和规范由处理器的指令规范指定。除了指令本身以外通常还有指令所需要的操作数,可能有的指令不需要显式的操作数。这些操作数可能是寄存器中的值,堆栈中的值,某块内存的值或者IO端口中的值等等。通常opcode还有另一种称谓:字节码(bytecodes)。例如Java虚拟机(JVM),.NET的通用中间语言(CIL:CommonIntermeditateLanguage)等等。PHP中的opcode则属于前面...
继续阅读 >
2014
11-07
11-07
PHP内核探索 —— 解释器的执行过程:引擎是如何执行PHP代码的
这里将介绍引擎内部执行一个PHP脚本的流程,以CLISAPI为例子来对流程中核心的部分做简单介绍,省去一些初始化及清理操作。CLI(CommandLineInterface)即PHP的命令行模式,现在此SAPI是默认安装的,我们在服务器上安装完PHP之后,一般会生成一个可执行文件,假设此文件为/usr/local/bin/php ,那么我们在SHELL下可以用以下命令来执行一个PHP脚本:/usr/local/bin/php-ftest.php这个命令将执行当前目录下的test.php脚本,我...
继续阅读 >