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。

如果运行php swoole-server.php后告诉你端口号被占用,我们需要查出占用端口的进程,杀掉即可。

sudo lsof -i :9000 kill -9 端口号

你可能感兴趣的:(Php,Swoole,websocket)