# 安裝擴展
[TOC]
## 注意
與Apache+PHP或者Nginx+PHP的運行模式不同,swoole是基于PHP命令行 [PHP CLI](http://php.net/manual/zh/features.commandline.php) 運行的,使用的是不同的PHP可執行程序,使用的php.ini文件也可能不同。所以在網頁中打印```phpinfo()```看到安裝了某個擴展,不代表命令行的PHP CLI也安裝了對應的擴展。
## 如何確定PHP CLI安裝了哪些擴展
運行 ```php -m``` 會列出命令行 PHP CLI 已經安裝的擴展,結果類似如下:
```php
~# php -m
[PHP Modules]
libevent
posix
pcntl
...
```
## 如何確定PHP CLI 的php.ini文件的位置
當我們安裝擴展時,可能需要手動配置php.ini文件,把擴展加進去,所以要確認PHP CLI的php.ini文件的位置。可以運行```php --ini```查找PHP CLI的ini文件位置,結果類似如下(各個系統顯示結果會有差異):
```php
~# php --ini
Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File: /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed: /etc/php5/cli/conf.d/apc.ini,
/etc/php5/cli/conf.d/libevent.ini,
/etc/php5/cli/conf.d/memcached.ini,
/etc/php5/cli/conf.d/mysql.ini,
/etc/php5/cli/conf.d/pdo.ini,
/etc/php5/cli/conf.d/pdo_mysql.ini
...
```
# 給PHP CLI安裝擴展(安裝memcached擴展為例)
## 方法一、使用apt或者yum命令安裝
如果PHP是通過 apt 或者 yum 命令安裝的,則擴展也可以通過 apt 或者 yum 安裝
**debian/ubuntu等系統apt安裝PHP擴展方法(非root用戶需要加sudo命令)**
1、利用```apt-cache search```查找擴展包
```php
~# apt-cache search memcached php
php-apc - APC (Alternative PHP Cache) module for PHP 5
php5-memcached - memcached module for php5
```
2、使用```apt-get install```安裝擴展包
```php
~# apt-get install -y php5-memcached
Reading package lists... Done
Reading state information... Done
...
```
**centos等系統yum安裝PHP擴展方法**
1、利用```yum search```查找擴展包
```php
~# yum search memcached php
php-pecl-memcached - memcached module for php5
```
2、使用```yum install```安裝擴展包
```php
~# yum install -y php-pecl-memcached
Reading package lists... Done
Reading state information... Done
...
```
**說明:**
使用apt或者yum安裝PHP擴展會自動配置php.ini文件,安裝完直接可用,十分方便。缺點是有些擴展在apt或者yum中沒有對應的擴展安裝包。
## 方法二、使用pecl安裝
使用```pecl install```命令安裝擴展
1、```pecl install```安裝
```php
~# pecl install memcached
downloading memcached-2.2.0.tgz ...
Starting to download memcached-2.2.0.tgz (70,449 bytes)
....
```
2、配置php.ini
通過運行 ```php --ini```查找php.ini文件位置,然后在文件中添加```extension=memcached.so```
## 方法三、源碼編譯安裝(一般是安裝PHP自帶的擴展,以安裝pcntl擴展為例)
1、利用```php -v```命令查看當前的PHP CLI的版本
```php
~# php -v
PHP 5.3.29-1~dotdeb.0 with Suhosin-Patch (cli) (built: Aug 14 2014 19:55:20)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
```
2、根據版本下載PHP源代碼
PHP歷史版本下載頁面:<http://php.net/releases/>
3、解壓源碼壓縮包
例如下載的壓縮包名稱是```php-5.3.29.tar.gz```
```php
~# tar -zxvf php-5.3.29.tar.gz
php-5.3.29/
php-5.3.29/README.WIN32-BUILD-SYSTEM
php-5.3.29/netware/
...
```
4、進入源碼中的ext/pcntl目錄
```php
~# cd php-5.3.29/ext/pcntl/
```
5、運行 ```phpize``` 命令
```php
~# phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
```
6、運行 ```configure```命令
```php
~# ./configure
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
...
```
7、運行 ```make``` 命令
```php
~# make
/bin/bash /tmp/php-5.3.29/ext/pcntl/libtool --mode=compile cc ...
-I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend...
...
```
8、運 行```make install``` 命令
```php
~# make install
Installing shared extensions: /usr/lib/php5/20090626/
```
9、配置ini文件
通過運行 ```php --ini```查找php.ini文件位置,然后在文件中添加```extension=pcntl.so```
**說明:**
此方法一般用來安裝PHP自帶的擴展,例如posix擴展和pcntl擴展。除了用phpize編譯某個擴展,也可以重新編譯整個PHP,在編譯時用參數添加擴展,例如在源碼根目錄運行
```php
~# ./configure --enable-pcntl --enable-posix ...
~# make && make install
```
## 方法四、phpize安裝
如果要安裝的擴展在php源碼ext目錄中沒有,那么這個擴展需要到<http://pecl.php.net> 搜索下載
以安裝libevent擴展為例(假設系統安裝了libevent-dev庫)
1、下載libevent擴展文件壓縮包(在當前系統哪個目錄下載隨意)
```php
~# wget http://pecl.php.net/get/libevent-0.1.0.tgz
--2015-05-26 21:43:40-- http://pecl.php.net/get/libevent-0.1.0.tgz
Resolving pecl.php.net... 104.236.228.160
Connecting to pecl.php.net|104.236.228.160|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9806 (9.6K) [application/octet-stream]
Saving to: “libevent-0.1.0.tgz”
100%[=======================================================>] 9,806 41.4K/s in 0.2s
```
2、解壓擴展文件壓縮包
```php
~# tar -zxvf libevent-0.1.0.tgz
package.xml
libevent-0.1.0/config.m4
libevent-0.1.0/CREDITS
libevent-0.1.0/libevent.c
....
```
3、進入到源碼目錄
```php
~# cd libevent-0.1.0/
```
4、運行`phpize`命令
```php
~# phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
```
5、運行`configure`命令
```php
~# ./configure
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking whether the C compiler works... yes
...
```
6、運行`make`命令
```php
~# /bin/bash /data/test/libevent-0.1.0/libtool --mode=compile cc -I. -I/data/test/libevent-0.1.0 -DPHP_ATOM_INC -I/data/test/libevent-0.1.0/include
...
```
7、運行`make install`命令
```php
~# make install
Installing shared extensions: /usr/lib/php5/20090626/
```
8、配置ini文件
通過運行 ```php --ini```查找php.ini文件位置,然后在文件中添加```extension=libevent.so```
## **備注**
swoole擴展安裝
安裝swoole前必須保證系統已經安裝了下列軟件
* php-5.3.10 或更高版本
* gcc-4.4 或更高版本
* make
* autoconf
pcre (centos系統可以執行命令:yum install pcre-devel)
下載地址
https://github.com/swoole/swoole-src/releases
http://pecl.php.net/package/swoole
http://git.oschina.net/swoole/swoole
下載源代碼包后,在終端進入源碼目錄,執行下面的命令進行編譯和安裝
~~~
cd swoole
phpize
./configure
make
sudo make install
~~~
PECL
swoole項目已收錄到PHP官方擴展庫,除了手工下載編譯外,還可以通過PHP官方提供的pecl命令,一鍵下載安裝swoole
~~~
pecl install swoole
~~~
配置php.ini
編譯安裝成功后,修改php.ini加入
~~~
extension=swoole.so
~~~
通過php -m或phpinfo()來查看是否成功加載了swoole,如果沒有可能是php.ini的路徑不對,可以使用php -i |grep php.ini來定位到php.ini的絕對路徑。
- swoole簡介
- swoole功能概述
- 序章
- 開發必讀
- 1 環境搭建
- 1.1 環境搭建
- 1.2 搭建Echo服務器
- 2 初識Swoole
- 2.1 Worker進程
- 2.2 TaskWorker進程
- 2.3 Timer定時器
- 2.4 Process進程
- 2.5 Table內存表
- 2.6 多端口監聽
- 2.7 sendfile文件支持
- 2.8 SSL支持
- 2.9 熱重啟
- 2.10 http_server
- 附錄*server配置
- 附錄*server函數
- 附錄*server屬性
- 附錄*server回調函數
- 附錄*server高級特性
- 心跳檢測
- 3 Swoole協議
- 3.1 EOF協議
- 3.2 固定包頭協議
- 3.3 Http協議
- 3.4 WebSocket協議
- 3.5 MTQQ協議
- 內置http_server
- 內置websocket_server
- Swoole\Redis\Server
- 4 Swoole異步IO
- 4.1 AsyncIO
- 異步文件系統IO
- swoole_async_readfile
- swoole_async_writefile
- swoole_async_read
- swoole_async_write
- 5 swoole異步客戶端
- ws_client
- http_client
- mysql_client
- redis_client
- tcp_client
- http2_client
- 6 swoole協程
- Swoole\Coroutine\Http\Client
- Swoole\Coroutine\MySQL
- Swoole\Coroutine\Redis
- Coroutine\PostgreSQL
- Swoole\Coroutine\Client
- Swoole\Coroutine\Socket
- Swoole\Coroutine\Channel
- Coroutine
- Swoole\Coroutine::create
- Swoole\Coroutine::resume
- Swoole\Coroutine::suspend
- Swoole\Coroutine::sleep
- Coroutine::getaddrinfo
- Coroutine::gethostbyname
- swoole_async_dns_lookup_coro
- Swoole\Coroutine::getuid
- getDefer
- setDefer
- recv
- Coroutine::stats
- Coroutine::fread
- Coroutine::fget
- Coroutine::fwrite
- Coroutine::readFIle
- Coroutine::writeFIle
- Coroutine::exec
- 7 swoole_process
- process::construct
- process::start
- process::name
- process::signal
- process::setaffinity
- process::exit
- process::kill
- process::daemon
- process->exec
- process::wait
- process::alarm
- 8 swoole定時器
- swoole_timer_tick
- swoole_timer_after
- swoole_timer_clear
- 9 swoole_event
- swoole_event_add
- swoole_event_set
- swoole_event_del
- swoole_event_wait
- swoole_event_defer
- swoole_event_write
- swoole_event_exit
- swoole提供的function
- 常見問題
- 客戶端鏈接失敗原因
- 如何設置進程數
- 如何實現異步任務
- 如何選擇swoole三種模式
- php中哪些函數是阻塞的
- 是否可以共用1個redis或mysql連接
- 如何在回調函數中訪問外部的變量
- 為什么不要send完后立即close
- 不同的Server程序實例間如何通信
- MySQL的連接池、異步、斷線重連
- 在php-fpm或apache中使用swoole
- 學習Swoole需要掌握哪些基礎知識
- 在phpinfo中有在php-m中沒有
- 同步阻塞與異步非阻塞選擇
- CURL發送POST請求服務器端超時
- 附錄
- 預定義常量
- 內核參數調優
- php四種回調寫法
- 守護進程程序常用數據結構
- swoole生命周期
- swoole_server中內存管理機制
- 使用jemalloc優化swoole內存分配性能
- Reactor、Worker、Task的關系
- Manager進程
- Swoole的實現
- Reactor線程
- 安裝擴展
- swoole-worker手冊
- swoole相關開源項目
- 寫在后面的話
- 版本更新記錄
- 4.0