# 安装rabbitmq-c依赖包
yum install libtool autoconf

# 安装rabbitmq-c ( 最好下载 0.5的,0.6安装可能会报错)
# 版本下载:https://github.com/alanxz/rabbitmq-c/releases/tag/v0.9.0
wget https://github.com/alanxz/rabbitmq-c/archive/v0.9.0.tar.gz
tar -zxvf v0.9.0.tar.gz
cd rabbitmq-c-0.9.0/
autoreconf -i
./configure –prefix=/usr/local/rabbitmq-c
make
make install

# 安装PHP扩展 amqp
wget http://pecl.php.net/get/amqp-1.9.4.tgz
tar zxvf amqp-1.9.4.tgz
cd amqp-1.9.4
/usr/local/php7.3/bin/phpize
./configure –with-php-config=/usr/local/php7.3/bin/php-config –with-amqp –with-librabbitmq-dir=/usr/local/rabbitmq-c
make
make install

# 编辑php.ini文件,增加amqp扩展支持
vim /usr/local/php/etc/php.ini

# 增加下面内容
; rabbitmq扩展支持
extension=amqp.so

# 重启php-fpm
/etc/init.d/php-fpm7.3 restart

在最近一段时间,公司的架构从php5.6.22升级到了php7.1.12,但是在期间又开发了一套新的框架,但是这个框架需要使用memcache的扩展,当时找到我叫我帮忙安装一下,我心想不就是一条pecl命令安装就可以吗?这么简单就马上答应了。然后安装时就遇到报错了(主要报错如下):

fatal error: ext/standard/php_smart_str.h: No such file or directory
#include “ext/standard/php_smart_str.h”
^
compilation terminated.
make: *** [memcache.lo] Error 1
ERROR: `make’ failed

然后就去翻查了一下资料,pecl好像不支持安装memcache扩展。这样只能找其他办法解决了,在期间也踩了很多坑,后来找到了一个github上的可支持php7的memcache扩展

接下来就是安装步骤了:

  • 拉去memcache扩展

cd /usr/local/src/
git clone https://github.com/websupport-sk/pecl-memcache

  • 编译安装memcache扩展

cd pecl-memcache/
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make && make install

Installing shared extensions:    /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/

  • 上面已经安装完成memcache扩展,接下来把它加入php.ini中

vim  /etc/php.ini

extension_dir = “/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/”
extension = “memcache.so”

  • 重启php-fpm使配置生效

/etc/init.d/php-fpm reload

一下是php7.2的安装位置

/usr/local/php7.2/bin/phpize

这个是swoole 4.2.9安装命令

./configure –with-php-config=/usr/local/php7.2/bin/php-config –enable-openssl –with-openssl-dir=/usr/local/openssl –enable-sockets –enable-mysqlnd

这个是开发的时候安装debug-log的情况

./configure –with-php-config=/usr/local/php7.2/bin/php-config –enable-openssl –with-openssl-dir=/usr/local/openssl –enable-sockets –enable-mysqlnd –enable-debug-log

–enable-swoole-debug | –enable-debug-log(>=4.2.0) debug是这样开启的
make clean && make && sudo make install

<?php
//简单的抽奖算法
//prob概率 总和为1k , 10k , 100k,自己设  id为具体奖品
$data = [
    ['prob' => 6000 , 'id' => 1],
    ['prob' => 16500 , 'id' => 2],
    ['prob' => 16500 , 'id' => 3],
    ['prob' => 900 , 'id' => 4],
    ['prob' => 700 , 'id' => 5],
    ['prob' => 59000 , 'id' => 6],
    ['prob' => 200 , 'id' => 7],
    ['prob' => 200 , 'id' => 8],
];

//抽奖概率

if(count($data) == 1){
    $gift = $data[0];
}else{
    //抽奖概率
    $prob_arr = [];
    $proSum = array_sum(array_column($data,'prob')); //概率总数目 千级 万级

    //计算1  推荐  10w内存消耗5M
    foreach ($data as $dk => $dg) {
        for($i=0;$i<$dg['prob'];$i++){
            $prob_arr[] = $dk;
        }
    }
    //计算2  这种的内存消耗是1的2倍 时间消耗是1的4倍(10w测试,内存消耗10M) 并且概率总数越大,差别越大 这个不要用
//    foreach ($data as $dk => $dg) {
//        $prob_arr = array_merge($prob_arr,array_fill(0,$dg['prob'],$dk));
//    }

    shuffle($prob_arr);//打乱数组
    $prob_id = $prob_arr[mt_rand(0,$proSum-1)];

    //抽奖概率结束
    $gift = $data[$prob_id];
}

//本机联想E470测试结果如下

//0.000700 ~ 0.000200 ,内存使用189k 总和1k
//0.001400 ~ 0.004400 ,内存使用706k 总和10k
//0.040100 ~ 0.024300 ,内存使用5M   总和100k