macos下使用pecl安装swoole扩展的方法
执行sudo pecl install swoole
可能报错找不到php.h
fatal error: 'php.h' file
not found
#include "php.h"
^
1 error generated.
make: *** [swoole.lo] Error 1
ERROR: `make’ failed
解决办法
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include /usr/include
不要照抄把MacOSX10.13.sdk换成你自己的macos版本
可能报错没有操作权限
Operation not permitted
这个是macos新版本中的引入了 Rootless策略,我们会对一些系统的目录没有操作的权限,即使是root用户也不行(一定是个假root)。
暂时关闭的方法是*关机重启后按住command + R别送,进入安全模式。
在安全模式下打开终端,输入下面命令后重新启动即可
csrutil disable
开启的办法也很简单
csrutil enable
关闭后在执行sudo pecl install swoole
命令,等待安装完成,这下应该就没有什么问题了。
Build process completed successfully
Installing '/usr/lib/php/extensions/no-debug-non-zts-20160303/swoole.so'
install ok: channel://pecl.php.net/swoole-1.9.22
configuration option "php_ini" is not set to php.ini location
You should add "extension=swoole.so" to php.ini
看到Success应该安装成功了,然后把extension=swoole.so
这行代码添加到php.ini
文件中即可。
让我们来测试下swoole能不能用
在你的htdocs目录下新建swoole_server.php
,输入下边的代码
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501);
//监听连接进入事件
$serv->on('connect', function ($serv, $fd) {
echo "Client: Connect.\n";
});
//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, "Server: ".$data);
});
//监听连接关闭事件
$serv->on('close', function ($serv, $fd) {
echo "Client: Close.\n";
});
//启动服务器
$serv->start();
cmd+x
保存退出
然后执行脚本
swoole_server.php
执行完毕后应该没有反应,linux里没有反应就是没啥毛病。
然后新打开一个窗口执行telnet 127.0.0.1 9501
,然后坑又来了,报错command not found
,为啥呢?
因为苹果爸爸在macos 10.13版本中移除了telnet
命令,当然你可以通过brew安装回来。但是既然苹果爸爸不建议你用那就不用了呗,我们可以用下面的命令代替。
curl -v telnet://127.0.0.1:9501
在连接成功后,我们输入hello
。
ok啦!
如果运行php swoole-server.php
后告诉你端口号被占用,我们需要查出占用端口的进程,杀掉即可。
sudo lsof -i :9000
kill -9 端口号
安装pecl的方法