MAMP 下安裝Swoole拓展

最近想學(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 ,可以看到

WX20170407-174700@2x.png

編譯安裝大家可以看下官網(wǎng)

(__) 嘻嘻……點我跳轉(zhuǎn)!

測試

下面測試下我們剛剛安裝的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é)果啦!大功告成!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容