1. 程式人生 > >編譯安裝 PHP 擴展

編譯安裝 PHP 擴展

start .net quest 下載 mongodb 啟動 mem 需要 pid

編譯安裝 Redis 擴展 - phpredis
編譯安裝 Swoole 擴展
編譯安裝 Pcntl 擴展
編譯安裝 Sockets 擴展
編譯安裝 Event 擴展
編譯安裝 Mongodb 擴展
編譯安裝 Memcache 擴展

編譯安裝 Redis 擴展

predis,是 PHP 代碼實現原生 redis client,采用socket連接,只依賴於 php 解釋器,無需安裝擴展
phpredis(php extension redis)是 C 編寫的 PHP原生擴展,支持 php-fmp 模式下的 redis 持久連接
對比:
功能:區別不大
性能:c 編寫的 phpredis 性能理論上要好一點,但是除非執行大量 redis 命令,否則很難有性能上的區別,因為 redis 命令的開銷大多在網絡傳輸上,不過在 php-fpm 模式下,phpredis 的持久連接性能會比 predis 性能高出一大截

  1. 下載解壓
    sudo wget https://pecl.php.net/get/redis-4.2.0.tgz
    sudo tar -zxvf redis-4.2.0.tgz
    cd redis-4.2.0
  2. phpize 生成配置文件 configure
    # 為了使用方便可創建軟連接
    sudo ln -s /usr/local/php/bin/phpize  /usr/bin/phpize
    # 生成配置
    sudo phpize
  3. 配置
    sudo ./configure --with-php-config=/usr/local/php/bin/php-config # 指定配置
  4. 編譯 && 安裝
    sudo make && sudo make install 
  5. 查看是否生成 redis.so
    ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/redis.so
  6. 成功後配置 php.ini
    sudo vim /usr/local/php/etc/php.ini
    # 添加配置
    extension=redis.so
  7. 測試 - 前提 有可連接的 redis-server
    # 創建文件 sudo touch redis_test.php
<?php
$redis = new Redis() or die("can‘t load redis modules");

$redis->connect(‘127.0.0.1‘, 6379);
$redis->auth(‘‘);
$redis->set(‘test‘, ‘hello redis‘);
echo $redis->get(‘test‘);

php redis_test.php
打印 hello redis 則表示成功

編譯安裝 Swoole 4.2.2 擴展

  1. 下載解壓
    sudo wget  https://gitee.com/swoole/swoole/repository/archive/v4.2.2.zip
    sudo apt install unzip
    sudo unzip v4.2.2.zip && cd swoole
  2. phpize 生成 ./configure 文件
    sudo phpize

    phpize 作用:
    偵測環境,根據當前 php 信息生成 ./configure 文件
    為編譯安裝的 php 創建外掛模塊,不用再次編譯 php
    執行之後會生成 ./configure 文件

  3. 配置
    sudo ./configure --with-php-config=/usr/local/php/bin/php-config # 指定配置,多版本php
  4. 編譯 && 測試 && 安裝
    sudo make && sudo make test && sudo make install
  5. 查看 swoole.so 是否正常生成
    # 編譯完成擴展目錄: /usr/local/php/lib/php/extensions 下
    ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/swoole.so
  6. php.ini 配置 swoole.so
    # 查看 php.ini 配置路徑 指令
    php -i | grep php.ini
    # 配置
    sudo vim /usr/local/php/etc/php.ini
    extension=swoole.so
  7. 重啟 && 查看擴展
    sudo service php-fpm reload
    # 查看
    php -m|grep swoole
    # 查看 swoole 詳細配置
    php --ri swoole
  8. 測試
    # touch http_server.php

<?php 
use Swoole\Http\Server;

$http = new Server(‘127.0.0.1‘, 9501);
$http->on(‘request‘, function($request, $response){
    $response->end("<h1>Hello Swoole . #".rand(1000, 9999)."</h1>");
});

$http->start();

# 啟動 http 服務
php http_server.php
# 打開瀏覽器訪問  127.0.0.1:9501 ,頁面展示一下內容則表示成功
Hello Swoole . #5912

編譯安裝 Pcntl 擴展

Pcntl 是 PHP cli 模式下的多進程擴展,只支持 unix 類系統,源碼編譯安裝 php 時,默認是關閉的,需要在編譯時使用 --enable-pcntl 開啟
如果已經編譯安裝 PHP,pecl 是沒有提供源碼包的,因為源碼包已經包含在 PHP 源碼中了,只需要到解壓的源碼目錄中去編譯安裝就好了

  1. 進入源碼目錄
    cd /usr/local/src/php-7.2.12/ext/pcntl
  2. 生成配置文件
    sudo phpize
  3. 配置
    sudo ./configure --with-php-config=/usr/local/php/bin/php-config
  4. 編譯 && 測試 && 安裝
    sudo make && sudo make test && sudo make install
  5. 查看 pcntl.so
    ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/pcntl.so
  6. 配置 php.ini
    sudo vim /usr/local/php/etc/php.ini
    extension=pcntl.so
  7. 重啟 php-fpm
    sudo service php-fpm reload
  8. 測試 touch pcntl_test.php
<?php
echo "當前進程 id:".getmypid().PHP_EOL;

// 創建進程
$pid = pcntl_fork();
if ($pid < 0) {
    exit(‘fork fail‘.PHP_EOL);
}else if($pid > 0){
    for ($i=0; $i < 10; $i++) { 
        echo "這是父進程 pid:".$pid.PHP_EOL;
    }
}else{
    for ($i=0; $i <5 ; $i++) { 
        echo "這是子進程 pid:".$pid.PHP_EOL;
    }
}

php pcntl_test.php

編譯安裝 Sockets 擴展

升級 re2c
sudo upgrade re2c

  1. 進入源碼目錄
    cd /usr/local/src/php-7.2.12/ext/sockets
  2. 生成 configure 文件
    sudo phpize
  3. 配置
    sudo ./configure --with-php-config=/usr/lcoal/php/bin/php-config
  4. 編譯 && 測試 && 安裝
    sudo make && sudo make test && sudo make install
  5. 配置 php.ini
    sudo vim /usr/local/php/etc/php.ini
    extension=sockets

編譯安裝 Event 擴展

LibEvent 是一個 C 語言編寫的、輕量級的開源高性能 I/O 框架
支持多種 I/O 多路復用:
epoll、poll、dev/poll、select、kqueue等
支持 I/O 、定時器和信號等事件,支持註冊事件優先級
對應擴展 libevent 、event
libevent 不再更新,僅支持 php5, Event 對 php7 支持較好,且提供了面向對象和更多特性

Event Loop : 事件循環/輪詢
依賴於 sockets 擴展 --enable-sockets 或者編譯安裝
event 擴展依賴於 Libevent 庫

  • 安裝 libevent 庫
    # 下載
    sudo wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
    # 解壓
    sudo tar -zxvf libevent-2.1.8-stable.tar.gz
    # 配置
    cd libevent-2.1.8-stable
    sudo ./configure --prefix=/usr/local/lib/libenvent-2.1.8
    # 編譯
    sudo make
    # 安裝
    sudo make install 
  • 安裝 event

    1.下載解壓

    sudo ln -s /usr/local/php/bin/pecl /usr/bin/pecl
    sudo wget http://pecl.php.net/get/event-2.4.1.tgz
    tar -zxvf event-2.4.1.tgz && cd event-2.4.1/

    2.生成配置 文件 configure

    sudo phpize

    3.配置

    sudo ./configure --with-php-config=/usr/local/php/bin/php-config --with-event-libevent-dir=/usr/local/lib/libenvent-2.1.8/

    4.編譯 && 安裝

    sudo make && sudo make test && sudo make install

    5.配置 php.ini

    sudo vim /usr/local/php/etc/php.ini
    # 要在 extension=sockets 之後
    extension=event.so

    6.重啟

    sudo service php-fpm reload
    php --ri event

    編譯安裝 Mongodb 擴展

  PHP 有 Mongo 和 Mongodb 兩個擴展
  Mongo 已經廢棄,不支持 PHP7
  Mongodb 支持 PHP7,且具有 Mongodb 的新特性

1.下載解壓

sudo wget http://pecl.php.net/get/mongodb-1.5.3.tgz
sudo tar -zxvf mongodb-1.5.3.tgz && cd /usr/local/src/mongodb-1.5.3

2.生成配置文件 configure

sudo phpize

3.配置

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

4.編譯 && 安裝

sudo make && sudo make install

5.配置 php.ini

sudo vim /usr/local/php/etc/php.ini
extension=mongodb.so

6.重啟 php-fpm

sudo service php-fpm reload

7.查看

php --ri mongodb

編譯安裝 PHP 擴展