Heim  >  Artikel  >  Backend-Entwicklung  >  BS模式中用php创建socket 无权限的解决办法_PHP教程

BS模式中用php创建socket 无权限的解决办法_PHP教程

WBOY
WBOYOriginal
2016-07-13 17:53:14889Durchsuche

最近为南方基地的平台编写监控接口,采用BS构架,其中有一个监测虚拟机是否宕机的功能。
    过程为:监控机发出访问请求-->接口分析请求-->启动socket检测目标虚拟机是否宕机。
    因为通过ICMP协议检测,所以用了 SOCK_RAW 的socket类型。
服务器使用apache + php + mysql,发现程序出错,提示说没有权限创建socket。后来查资源得知,此类socket需要root权限或者以cgi方式跑php结合用 setuid() 才能创建socket。
    解决方法:改用nginx+php-cgi+mysql解决。
    在编译php的时候,要做以下修改才能用root用户启动服务。

1.找到php的源代码$src_path/sapi/cgi/fpm/fpm_unix.c (版本不一样,最好是通过 find $src_path -name fpm_unix.c)

2.在文件顶部增加一个宏定义:#define I_REALLY_WANT_ROOT_PHP

3.重新 configure make make install

4.php-fpm.conf 将user、group都修改成root


作者:penguim

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478048.htmlTechArticle最近为南方基地的平台编写监控接口,采用BS构架,其中有一个监测虚拟机是否宕机的功能。 过程为:监控机发出访问请求--接口分析请求...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn