C/C++将动态内容编译成二进制可执行文件(目标代码),由操作系统进程直接装载运行,速度非常快。但PHP等语言不是编译型,而是解释型,它们不直接由操作系统来运行,而是由专门的解释器来运行,而解释器则由操作系统运行。
PHP由一个二进执行文件,如:/usr/local/php/bin/php
/usr/bin/php
会输出结果:333
PHP解释器先分析我们输入的
要查看PHP的opcode要先安装
安装 parsekit 扩展查看opcode
wget http://pecl.php.net/get/parsekit-1.3.0.tgz
[root@localhost software]# tar -zxvf parsekit-1.3.0.tgz
[root@localhost software]# cd parsekit-1.3.0
[root@localhost parsekit-1.3.0]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
[root@localhost parsekit-1.3.0]# ./configure -with-php-config=/usr/local/php/bin/php-config
[root@localhost parsekit-1.3.0]# make
[root@localhost parsekit-1.3.0]# make install
Installing shared extensions:
vim /usr/local/php/etc/php.ini
加入 extension=parsekit.so
配置文件的地址可以在 phpinfo 中查看。so 的地址即上面 make install 的目录下。
在命令行中输入:
/usr/local/php/bin/php
结果如下图:
后面还有很长。但可以看到,结果是以数组形式返回的。而且红框中标识的就是一些关键语法,如:ZEND_ADD,ZEND_PRINT
1.如果要查看单句php的opcode
# /usr/local/php/bin/php -r "var_dump(parsekit_compile_string('print 1+1;'));"
参考 http://www.php.net/manual/zh/function.parsekit-compile-string.php
2.如果要查看网站下某个php文件的opcode
# /usr/local/php/bin/php -r "var_dump(parsekit_compile_file('/var/www/tb.php'));"
参考
而上面的过程,我们可以看到。每条PHP语句都会被解释器解释成
XCache相关
安装
wget
tar
cd
phpize
./configure
make
make
设置
打开php.ini文件,增加如下代码:
[xcache-common]
;
;
zend_extension
[xcache.admin]
xcache.admin.auth
xcache.admin.user
;
xcache.admin.pass
[xcache]
xcache.shm_scheme
xcache.size
xcache.count
xcache.slots
xcache.ttl
xcache.gc_interval
;
;
xcache.var_size
xcache.var_count
xcache.var_slots
xcache.var_ttl
xcache.var_maxttl
xcache.var_gc_interval
;
xcache.readonly_protection
xcache.mmap_path
xcache.cacher
xcache.stat
注意修改zend_extension
eAccelerator相关
安装
#
#
#
#
#
#
设置
eaccelerator.shm_size="32"
eAccelerator
eaccelerator.cache_dir="/home/php/tmp"
这个目录是给磁盘缓存使用.
eaccelerator.enable="1"
开启或关闭
eaccelerator.optimizer="1"
启或关闭内部优化器,可以提升代码执行速度。”1″
eaccelerator.check_mtime=”1″
打开或者关闭
eaccelerator.debug="0"
开启或关闭调试日志记录。”1″
eaccelerator.filter=""
判断哪些
如果参数以
eaccelerator.shm_max="0"
当使用
eaccelerator.shm_ttl="0"
当
eaccelerator.shm_prune_period="0"
当
eaccelerator.shm_only="0"
允许或禁止将已编译脚本缓存在磁盘上。该选项对
eaccelerator.compress="1"
允许或禁止压缩内容缓存。默认值为
eaccelerator.compress_level="9"
指定内容缓存的压缩等级。默认值为
eaccelerator.keys
eaccelerator.session
eaccelerator.content
设置内容缓存的存放的地方,可以设置为:
shm_and_disk
shm
shm_only
disk_only
none
eaccelerator.allowed_admin_path
这是控制面板的地址
安装包里有个control.php,你把它复制到网站的任意目录,可以用它查看和管理,这个必须指定,否则查看缓存内容的时候会出错
最后,来看一下我的
;
[eaccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys
eaccelerator.sessions
eaccelerator.content
eaccelerator.allowed_admin_path
APC 相关:
下载:
wget http://pecl.php.net/get/APC-3.1.9.tgz
解压:
tar -xf APC-3.1.9.tgz
cd APC-3.1.9
/usr/local/php/bin/phpize
./configure -enable-apc -enable-apc-mmap -with-php-config=/usr/local/php/bin/php-config
make && make install
然后更改 php.ini
vi /usr/local/php/etc/php.ini
在最后加上:
extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so"
把 apc.so 配置上去.
如果不知道本机 apc.so 在哪里,可以查找一下:
find / -type f -name apc.so
如果找不到,那说明前面的编译没成功。
再在 php.ini 里添加 apc 配置:
; APC Module
extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so"
apc.enabled
apc.filters
apc.max_file_size
apc.write_lock
apc.slam_defense
apc.shm_segments
apc.shm_size
apc.ttl
apc.user_ttl
apc.gc_ttl
apc.stat
apc.stat_ctime
apc.include_once_override
apc.num_files_hint
apc.stat
1
apc.enabled 可以被设成 0 来禁用 APC。这主要是有用的,当 APC 被静态编译入 PHP 时,因为没有其它方法来禁用它(当编译为 DSO 的时候,可以将 php.ini 中的 extension 行注释掉)。