# 安装扩展
[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