最近想學(xué)習swoole框架,在某些的安裝部分遇到一些了小坑。在此記錄一下,希望幫助到大家。
由于機子本身自帶的php版本過低,我是用Mamp集成環(huán)境開發(fā)的。PHP版本用的是5.6.10。命令行輸入which php時,系統(tǒng)會顯示 系統(tǒng)自帶的php。這個時候你需要先把默認的php修改為MAMP環(huán)境中的php 版本。詳細操作可以點這里:把mac上的默認php修改為MAMP等擴展環(huán)境中的php 版本 。Swoole有兩種的安裝方式:一種是通過pecl方式一鍵安裝,這種最簡單;另一種是編譯安裝。
Pecl安裝
MAMP自帶了各個版本的PHP環(huán)境,目錄在/Applications/MAMP/bin/php。我用的是5.6.10版本,對應(yīng)的目錄是/Applications/MAMP/bin/php/php5.6.10,如果使用Pecl,對應(yīng)的命令為:pecl install swoole 沒有權(quán)限的話就加上sudo 。如果你還沒安裝PECL的話,可以看這里mac上安裝pecl。
接下來是我在用pecl安裝過程中遇到的一些問題:
1. autoconf 不存在
running: phpize
grep: /Applications/MAMP/bin/php/php5.6.10/include/php/main/php.h: No such file or directory
grep: /Applications/MAMP/bin/php/php5.6.10/include/php/Zend/zend_modules.h: No such file or directory
grep: /Applications/MAMP/bin/php/php5.6.10/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
ERROR: `phpize’ failed
由于我安裝了homebrew , 所以直接 brew install autoconf 就成功的解決了這個問題。
2. 找不到 php.h 等頭文件
然后再輸入命令進行安裝,出現(xiàn)了下面的情況:
cc -I. -I/private/tmp/pear/install/swoole -DPHP_ATOM_INC -
I/private/tmp/pear/install/pear-build-rootapqmWw/swoole-1.9.8/include -
I/private/tmp/pear/install/pear-build-rootapqmWw/swoole-1.9.8/main -
I/private/tmp/pear/install/swoole -
I/Applications/MAMP/bin/php/php5.6.10/include/php -
I/Applications/MAMP/bin/php/php5.6.10/include/php/main -
I/Applications/MAMP/bin/php/php5.6.10/include/php/TSRM -
I/Applications/MAMP/bin/php/php5.6.10/include/php/Zend -
I/Applications/MAMP/bin/php/php5.6.10/include/php/ext -
I/Applications/MAMP/bin/php/php5.6.10/include/php/ext/date/lib -
I/private/tmp/pear/install/swoole -I/private/tmp/pear/install/swoole/include -
DHAVE_CONFIG_H -Wall -pthread -g -O2 -fno-strict-aliasing -std=gnu89 -c
/private/tmp/pear/install/swoole/swoole.c -fno-common -DPIC -o
.libs/swoole.o
In file included from /private/tmp/pear/install/swoole/swoole.c:16:
/private/tmp/pear/install/swoole/php_swoole.h:22:10: fatal error: 'php.h' file
not found
#include "php.h"
^
1 error generated.
make: *** [swoole.lo] Error 1
ERROR: `make’ failed
這個問題是由于 PECL 沒有在當前MAMP的php版本目錄中的include目前下找到對應(yīng)的php頭文件。解決這個問題的前提是安裝了XCode,Xcode的SDK里面包含了PHP的相關(guān)頭文件,所以可以進入到php5.6.10目錄下,創(chuàng)建一個軟鏈接,指向Xcode的PHP SDK。
cd /Applications/MAMP/bin/php/php5.6.10`
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.3.sdk/usr/include/ include
注意MacOSX(版本號).sdk修改為自己系統(tǒng)的版本號
3. 權(quán)限問題
可能你輸入ln -s那段命令后,會出去 /usr/include: Operation not permitted。 這是mac更新后,是El Capitan 加入了Rootless機制,不再能夠隨心所欲的讀寫很多路徑下了。設(shè)置 root 權(quán)限也不行。
Rootless機制將成為對抗惡意程序的最后防線
于是嘗試關(guān)閉 Rootless。重啟之后按住 Command+R,直到看見??的logo和進度條,就是進入恢復(fù)模式,打開窗口上面的終端,輸入csrutil disable。重啟即可。如果要恢復(fù)默認,那么 輸入csrutil enable。
重啟完畢后,再在目錄下嘗試pecl install swoole。終于輸出以下的東西了!
Build process completed successfully
Installing '/Applications/MAMP/bin/php/php5.6.10/lib/php/extensions/no-
debug-non-zts-20131226/swoole.so'
install ok: channel://pecl.php.net/swoole-1.9.8
configuration option "php_ini" is not set to php.ini location
You should add "extension=swoole.so" to php.ini
好大一個successfully?。?,然后看到You should add "extension=swoole.so" to php.ini。我們在輸入命令php -ini 找到php.ini文件的目錄,我的是在 /Appliacations/MAMP/bin/php/php5.6.10/conf/php.ini 然后添加一行 extension=swoole.so OK啦!
我們再試一下輸入php -m ,可以看到

編譯安裝大家可以看下官網(wǎng)
測試
下面測試下我們剛剛安裝的Swoole。
直接引用官網(wǎng)的例子吧。
新建一個swoole_demo.php
{
<?php
$http = new swoole_http_server("0.0.0.0", 9502);
$http->on('request', function ($request, $response) {
var_dump($request->get, $request->post);
$response->header("Content-Type", "text/html; charset=utf-8");
$response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();
}
在命令行下運行:
php swpple_demo.php
在瀏覽器中輸入http://localhost:9502/?hello=swoole,就可以看到結(jié)果啦!大功告成!!