編譯安裝 PHP 擴展
編譯安裝 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 性能高出一大截
- 下載解壓
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
- phpize 生成配置文件 configure
# 為了使用方便可創建軟連接 sudo ln -s /usr/local/php/bin/phpize /usr/bin/phpize # 生成配置 sudo phpize
- 配置
sudo ./configure --with-php-config=/usr/local/php/bin/php-config # 指定配置
- 編譯 && 安裝
sudo make && sudo make install
- 查看是否生成 redis.so
ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/redis.so
- 成功後配置 php.ini
sudo vim /usr/local/php/etc/php.ini # 添加配置 extension=redis.so
- 測試 - 前提 有可連接的 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 擴展
- 下載解壓
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
- phpize 生成 ./configure 文件
sudo phpize
phpize 作用:
偵測環境,根據當前 php 信息生成 ./configure 文件
為編譯安裝的 php 創建外掛模塊,不用再次編譯 php
執行之後會生成 ./configure 文件 - 配置
sudo ./configure --with-php-config=/usr/local/php/bin/php-config # 指定配置,多版本php
- 編譯 && 測試 && 安裝
sudo make && sudo make test && sudo make install
- 查看 swoole.so 是否正常生成
# 編譯完成擴展目錄: /usr/local/php/lib/php/extensions 下 ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/swoole.so
- php.ini 配置 swoole.so
# 查看 php.ini 配置路徑 指令 php -i | grep php.ini # 配置 sudo vim /usr/local/php/etc/php.ini extension=swoole.so
- 重啟 && 查看擴展
sudo service php-fpm reload # 查看 php -m|grep swoole # 查看 swoole 詳細配置 php --ri swoole
- 測試
# 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 源碼中了,只需要到解壓的源碼目錄中去編譯安裝就好了
- 進入源碼目錄
cd /usr/local/src/php-7.2.12/ext/pcntl
- 生成配置文件
sudo phpize
- 配置
sudo ./configure --with-php-config=/usr/local/php/bin/php-config
- 編譯 && 測試 && 安裝
sudo make && sudo make test && sudo make install
- 查看 pcntl.so
ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/pcntl.so
- 配置 php.ini
sudo vim /usr/local/php/etc/php.ini extension=pcntl.so
- 重啟 php-fpm
sudo service php-fpm reload
- 測試 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
- 進入源碼目錄
cd /usr/local/src/php-7.2.12/ext/sockets
- 生成 configure 文件
sudo phpize
- 配置
sudo ./configure --with-php-config=/usr/lcoal/php/bin/php-config
- 編譯 && 測試 && 安裝
sudo make && sudo make test && sudo make install
- 配置 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 擴展