php优化


一、模块

操作码缓存的优化模块

 

前提:yum -y install perl-devel

 

缓存模块(性能优化插件)二选一

eacceleratorxcache

 

mencache客户端模块(功能性插件)

memcache

 

和数据库连接模块(功能性插件)

PDO_MYSQL扩展模块

 

1、编译eaccelerator

/usr/local/php/bin/phpize   #这个是编译php扩展模块必须的东西

./configure  --enable-eaccelerator=shared  --with-php-config=/usr/local/php/bin/php-config

make

make  install

出现eaccelerator.so

 

2、编译xcache

/usr/local/php/bin/phpize   #这个是编译php扩展模块必须的东西

./configure  --enable-xcache      --with-php-config=/usr/local/php/bin/php-config

make

make  install

出现 xcache.so

 

3、编译memcache

/usr/local/php/bin/phpize  #这个是编译php扩展模块必须的东西

./configure  --with-php-config=/usr/local/php/bin/php-config

make

make  install

出现 memcache.so

 

4、编译PDO_MYSQL

PDO扩展为php访问数据库定义了一个轻量级的,一致性的接口,它提供了一个数据访问抽象层,这样,无论什么样的数据库,都可以通过一致性函数执行查询并获取数据。

/usr/local/php/bin/phpize   #这个是编译php扩展模块必须的东西

./configure    --with-php-config=/usr/local/php/bin/php-config  --with-pdo-mysql=/usr/local/mysql

make

make  install

出现 pdo_mysql.so

 

5、配置php,优化相应的内容(eaccelerator)

1eaccelerator加速缓存配置

#修改配置文件内容

extension_dir=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226”   #模块的路径

cat  >>  /usr/local/php/etc/php.ini<<EOF

extension  =  memcache.so

extension  =  pdo_mysql.so

EOF

重启php-fpm服务

 

2)生效配置

#创建对应的缓存目录

mkdir  -p  /tmp/eaccelerator

chown nginx.nginx /tmp/eaccelerator -R  / chown apache.apache /tmp/eaccelerator -R

 

cat  >>  /usr/local/php/etc/php.ini<<EOF

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

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"

EOF

 

3)检查是否生效命令

/usr/local/php/bin/php -m  

 

4)检查目录是否有内容

tree /tmp/eaccelerator

#但是目前里面还没有文件,只有目录

 

5)重启后访问发现,目录里面有内容了

 

 

6、配置php,优化相应的内容(xcache)

1)修改xcache的主配置文件  /home/oldboy/tools/xcache-1.3.2/xcache.ini (修改下面参数)

;zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so   <=注释掉

;zend_extension = c:/php/extensions/php_xcache.dll    <=注释掉

xcache.size = 128M

xcache.count = 2

xcache.ttl = 86400

xcache.gc_interval = 3600

xcache.var_size = 0

2)然后把xcache主配置文件,追加到php.ini里面去即可

cat /usr/local/src/xcache-1.3.2/xcache.ini >> php.ini

3)检查模块是否加载进去

/usr/local/php/bin/php -m

 

 

二、php自身参数的优化

tmps作为内存缓存加速

mount -t tmps tmps /dev/shm -o size=256m

mount -t tmps /dev/shm /tmp/accelerator

备注:上传图片缩略图处理的目录

php.ini里面参数优化内容

序号

优化的参数名称

设置

1

安全机制打开

safe_mod = On

2

用户组安全,建议关闭

safe_mode_gid = Off

3

关闭危险函数

disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server

4

关闭php版本信息在http头中的泄露

expose_php = Off

5

关闭全局变量

register_global = Off

6

打开magic_quotes_gpc来防止sql注入

magic_quotes_gpc = On

不关闭危害:轻则网站后台被入侵,重则服务器沦陷

7

错误信息控制,建议关闭

display_errors = Off

8

错误日志,建议打开

log_errors = On

error_log = 路径

9

资源限制参数优化

max_execution_time = 30  #设置脚本运行的最长时间

memory_limit = 128M  #每个脚本使用的最大内存

max_input_time = 60  #每个脚本等待输入数据最长时间

upload_max_filesize = 2M  #上传文件最大许可大小

10

部分安全参数优化

allow_url_fopen = Off  #禁止打开远程地址

cgi.fix_pathinfo = 0  #防止nginx文件类型错误解析,这是一个漏洞

11

session问题

session.save_handler = memcache

session.save_path = “tcp://192.168.88.136:11211”

 

在编译opcache的模块时,需要添加的参数为:

[Zend Opcache]
zend_extension = $path/opcache.so
opcache.memory_consumption=64
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.force_restart_timeout=180
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
除了使用嵌套集模型之外,还可以通过缓存和优化查询语句来提高生成树型结构的效率。 缓存是一种常用的优化技术,它可以将查询结果保存在缓存中,下次查询时直接从缓存中读取,而不需要再次查询数据库。PHP 中有多种缓存技术可供选择,比如 Memcached、Redis、APC 等。以下代码展示了如何使用 Memcached 缓存生成树型结构的结果: ```php function generate_tree($data, $parent_id = 0, $level = 0) { $tree = ''; foreach ($data as $item) { if ($item['parent_id'] == $parent_id) { // 输出节点 $tree .= str_repeat('-', $level) . $item['name'] . '<br>'; // 递归查找子节点 $tree .= generate_tree($data, $item['id'], $level + 1); } } return $tree; } // 从缓存中获取树型结构,如果缓存不存在则生成并存入缓存 $memcached = new Memcached(); $memcached->addServer('localhost', 11211); $tree = $memcached->get('tree'); if (!$tree) { $data = [ ['id' => 1, 'name' => 'A', 'parent_id' => 0], ['id' => 2, 'name' => 'B', 'parent_id' => 1], ['id' => 3, 'name' => 'C', 'parent_id' => 1], ['id' => 4, 'name' => 'D', 'parent_id' => 2], ['id' => 5, 'name' => 'E', 'parent_id' => 2], ['id' => 6, 'name' => 'F', 'parent_id' => 3], ]; $tree = generate_tree($data); $memcached->set('tree', $tree); } echo $tree; ``` 另外,还可以通过优化查询语句来提高生成树型结构的效率。比如,可以使用 JOIN 语句代替递归查询子节点,或者使用 GROUP_CONCAT() 函数将子节点以逗号分隔的形式返回,然后在 PHP 中分割成数组。以下是使用 JOIN 语句生成树型结构的示例代码: ```php function generate_tree($data, $parent_id = 0, $level = 0) { $tree = ''; foreach ($data as $item) { if ($item['parent_id'] == $parent_id) { // 输出节点 $tree .= str_repeat('-', $level) . $item['name'] . '<br>'; // 递归查找子节点 $tree .= generate_tree($data, $item['id'], $level + 1); } } return $tree; } $db = new PDO('mysql:host=localhost;dbname=test', 'user', 'password'); $sql = "SELECT node.*, (COUNT(parent.id) - 1) AS depth FROM categories AS node JOIN categories AS parent ON node.parent_id = parent.id GROUP BY node.id ORDER BY node.lft"; $stmt = $db->query($sql); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); $tree = generate_tree($data); echo $tree; ``` 注意,使用 JOIN 语句查询树型结构时,需要注意数据库表的索引设计,以保证查询效率。同时,也需要注意查询结果中可能会出现重复节点的情况,需要在 PHP 中进行去重处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值