最近想學(xué)習(xí)swoole框架,在某些的安裝部分遇到一些了小坑汹想。在此記錄一下,希望幫助到大家撤蚊。
由于機(jī)子本身自帶的php版本過低,我是用Mamp集成環(huán)境開發(fā)的损话。PHP版本用的是5.6.10侦啸。命令行輸入which php
時(shí),系統(tǒng)會(huì)顯示 系統(tǒng)自帶的php丧枪。這個(gè)時(shí)候你需要先把默認(rèn)的php修改為MAMP環(huán)境中的php 版本光涂。詳細(xì)操作可以點(diǎn)這里:把mac上的默認(rèn)php修改為MAMP等擴(kuò)展環(huán)境中的php 版本 。Swoole有兩種的安裝方式:一種是通過pecl方式一鍵安裝拧烦,這種最簡(jiǎn)單忘闻;另一種是編譯安裝。
Pecl安裝
MAMP自帶了各個(gè)版本的PHP環(huán)境恋博,目錄在/Applications/MAMP/bin/php齐佳。我用的是5.6.10版本,對(duì)應(yīng)的目錄是/Applications/MAMP/bin/php/php5.6.10债沮,如果使用Pecl炼吴,對(duì)應(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
就成功的解決了這個(gè)問題闷煤。
2. 找不到 php.h 等頭文件
然后再輸入命令進(jìn)行安裝童芹,出現(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
這個(gè)問題是由于 PECL 沒有在當(dāng)前MAMP的php版本目錄中的include目前下找到對(duì)應(yīng)的php頭文件。解決這個(gè)問題的前提是安裝了XCode鲤拿,Xcode的SDK里面包含了PHP的相關(guān)頭文件假褪,所以可以進(jìn)入到php5.6.10目錄下,創(chuàng)建一個(gè)軟鏈接皆愉,指向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(版本號(hào)).sdk修改為自己系統(tǒng)的版本號(hào)
3. 權(quán)限問題
可能你輸入ln -s那段命令后艇抠,會(huì)出去 /usr/include: Operation not permitted
。 這是mac更新后久锥,是El Capitan
加入了Rootless
機(jī)制家淤,不再能夠隨心所欲的讀寫很多路徑下了。設(shè)置 root 權(quán)限也不行瑟由。
Rootless機(jī)制將成為對(duì)抗惡意程序的最后防線
于是嘗試關(guān)閉 Rootless絮重。重啟之后按住 Command+R,直到看見??的logo和進(jìn)度條歹苦,就是進(jìn)入恢復(fù)模式青伤,打開窗口上面的終端,輸入csrutil disable
殴瘦。重啟即可狠角。如果要恢復(fù)默認(rèn),那么 輸入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
好大一個(gè)successfully傲⑻!悠砚,然后看到You should add "extension=swoole.so" to php.ini
晓勇。我們?cè)谳斎朊?code>php -ini 找到php.ini文件的目錄,我的是在 /Appliacations/MAMP/bin/php/php5.6.10/conf/php.ini
然后添加一行 extension=swoole.so
OK啦灌旧!
我們?cè)僭囈幌螺斎?code>php -m 绑咱,可以看到
編譯安裝大家可以看下官網(wǎng)
測(cè)試
下面測(cè)試下我們剛剛安裝的Swoole节榜。
直接引用官網(wǎng)的例子吧羡玛。
新建一個(gè)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();
}
在命令行下運(yùn)行:
php swpple_demo.php
在瀏覽器中輸入http://localhost:9502/?hello=swoole
,就可以看到結(jié)果啦宗苍!大功告成<诟濉!