当前位置:首页 > 技术文章 > php > PHP优化
PHP优化
文章来源:本站原创  浏览次数:98  发布日期:2013-02-05

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的重复编译。可以使用APCXcache


使用这个不一定就能对性能进行大幅度的提升,它只能减少CPU的使用率和提高内存的剩余量。

(1)       APC的使用和安装(可到www.php.net下载)

下载对应PHP版本的php_apc.dll phpext目录下

修改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为启动12349过程优化

单独测试表明,zend optimizer提升的性能不是很明显,没有xcache的提升的性能高。

zend optimizer xcache 联合使用,有一定的性能提升,但是不是很大。

原文来自:PHP优化 http://www.redyun.net/technology/36.html

红云案例Case