对于网站建设中的PHP优化方法:
php版本号5.2.X
1、 配置优化:
(1) 隐藏HEADER输出的类似下面的信息
Server: PHP/5.2.9-2
X-Powered-By
修改php.ini文件里的expose_php,把On改为Off
正式生产服务器上禁用PHPINFO这个函数,在php.ini里找到
disable_functions = phpinfo;
(2)四个重要的设置控制 PHP 可使用多少系统资源
表 1. php.ini 中与资源相关的设置
设置 | 描述 | 建议值 |
max_execution_time | 一个脚本可使用多少 CPU 秒 | 30 |
max_input_time | 一个脚本等待输入数据的时间有多长(秒) | 60 |
memory_limit | 在被取消之前,一个脚本可使用多少内存(字节) | 32M |
output_buffering | 数据发送给客户机之前,有多少数据(字节)需要缓存 | 4096 |
error_reporting =E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR 将启用足够的日志记录,使您发现问题,同时从脚本中消除大量无用的内容。
2、 缓存
(1) 页面缓存。如果缓存的页面过多的话,可以对目录进行分级。进行缓存之前,关闭掉不必要的数据库访问连接。Smarty的文件缓存不是好的缓存方案,有很多不必要的开销。
(2) 内存缓存。将数据或页面缓存到内存中,主要可以减少磁盘的IO操作。可以使用APC或XCache的数据缓存方法。
(3) 缓存服务器。Memcache,分布式换成,方便以后扩展。
(1) 动态脚本加速
Opcode缓存,避免Opcode的重复编译。可以使用APC或Xcache
使用这个不一定就能对性能进行大幅度的提升,它只能减少CPU的使用率和提高内存的剩余量。
(1) APC的使用和安装(可到www.php.net下载)
下载对应PHP版本的php_apc.dll 到php的ext目录下
修改php.ini文件,在文件末尾添加如下配置
关闭apache的时候会报错,可能是php_apc.dll的版本问题。唯一的问题就是这里,看来只有试试XCACHE怎么样了?
性能的提高相当可观。并发数增加,并发时间减少。
[APC]
extension=php_apc.dll
apc.enabled = 1 //是否启用apc
apc.shm_segments= 1 //为编译器缓冲区分配的共享内存数量(建议为1)
apc.shm_size =64 //每个共享内存块的大小, 128~256
apc.optimization= 0 //优化级别,建议值为0
apc.num_files_hint= 1000 //可能被包含或被请求的不同源文件的大致数量
apc.ttl = 0 //缓冲条目在缓冲区中允许逗留的秒数 0为永不超时建议7200~36000
apc.user_ttl =3600 //只是针对每个用户而言
apc.gc_ttl =3600 //缓存条目在垃圾回收表中能够存在的秒数
apc.cache_by_default= On //用于缓存和优化中间代码,是否默认对所有文件启用缓冲
apc.slam_defense= 0 //建议设为0 否则可能导致竞争缓存同一个文件
apc.file_update_protection= 2 //修改时间距离访问时间小于2秒则不做缓冲
apc.enable_cli =0 //是否为CLI版本启用APC功能,仅用于测试和调试目的才打开
apc.stat=On //是否对文件进行检查,不进行检查的话,如果文件有更改都需要重启WEB
(2) XCACHE的安装和配置
下载安装对应版本的xcache,将php_xcache.dll拷贝到 php 的etc目录下。
将xcache.ini的配置拷贝到PHP.INI的最后。
修改后的参数及说明如下:
[xcache-common]
zend_extension_ts= php_xcache.dll //加载xcache
[xcache.admin]
xcache.admin.enable_auth= On //开启后台管理
xcache.admin.user= "mali" //用户名
xcache.admin.pass= "e10adc3949ba59abbe56e057f20f883e" //md5加密密码
[xcache]
xcache.shm_scheme= "mmap"
xcache.size =64M //代码缓存64M
xcache.count = 1 //cpu 数,影响性能,适合的才好
xcache.slots = 32K //只是个参考值,影响性能,适合的才好
xcache.ttl =3600 //缓存项目的 ttl, 0=永久
xcache.gc_interval= 3600 //扫描过期项目的时间间隔
xcache.var_size= 0M //对变量缓存设置,0为不启用
xcache.var_count= 1
xcache.var_slots= 8K
xcache.var_ttl =0
xcache.var_maxttl= 0
xcache.var_gc_interval= 300
xcache.test =Off //仅测试用
xcache.readonly_protection= Off //只读保护
xcache.mmap_path= "xcache" //对于 Win32 系统, xcache.mmap_path=匿名MAP名字
xcache.coredump_directory= "" //仅用于 *nix 系统
xcache.cacher =On //缓存开关
xcache.stat = On //统计开关,是否检测缓存文件
xcache.optimizer= Off //优化器开关
[xcache.coverager]
xcache.coverager= Off
xcache.coveragedump_directory= ""
admin管理文件夹有问题,访问了一次之后就无法访问了。
报错Fatal error: Call to undefined function_T() in
进行了下压力测试,还可以。跟APC差不多。就先用这个了,起码能正常使用
1、 脚本跟踪和优化
测试脚本计算所花费的时间,也是提升性能的一个要点。
使用X_DEBUG时不错的选择。
(1) X_DEBUG的配置和使用
[Xdebug]
zend_extension_ts=php_xdebug.dll //必须以这种方式加载,否则不成功
xdebug.auto_trace=On //自动打开监测函数调用过程
xdebug.collect_params=On //打开收集函数参数的功能
xdebug.collect_return=On //打开收集函数返回值的功能
xdebug.trace_output_dir="c:\php5.2\Projects\xdebug" //设定函数调用监测信息的输出文件的路径
xdebug.profiler_enable=on //打开效能监测器
xdebug.profiler_output_dir="c:\php5.2\Projects\xdebug" //设定效能监测器的路径
配置完成后,重启Apache,然后在输出目录,可以看到输出来的文件,这些可以用记事本打开,但是很难看懂。下载WinCacheGrind.exe来查看,便一目了然了,能够很详细的看到各种函数的调用及执行的时间。
任何位置调用xdebug_time_index()方法都获得脚本开始执行到该位置所花费的时间。
xdebug_start_code_coverage();
PHP代码
var_dump(xdebug_get_code_coverage());
查看opcode码。
2、 zend optimizer 加速PHP代码
据zend公司透露zend optimizer能够提高30%左右的性能,主要是它优化编译时的代码。
zend optimizer 的配置,去官网下载zend optimizer 3.3。然后按照提示来进行安装,安装完成之后php.ini文件的末尾会自动加上如下配置,我们再添加点上去。
[Zend]
zend_extension_manager.optimizer_ts="d:\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"
zend_extension_ts="d:\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"
zend_ optimizer.encoder_loader= 0 //0为不使用对加密的代码优化
zend_ optimizer.optimization_level= 271 //这里是优化等级,271为启动1、2、3、4、9过程优化
单独测试表明,zend optimizer提升的性能不是很明显,没有xcache的提升的性能高。
zend optimizer 和xcache 联合使用,有一定的性能提升,但是不是很大。