程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> BS模式中用php創建socket 無權限的解決辦法

BS模式中用php創建socket 無權限的解決辦法

編輯:關於PHP編程

最近為南方基地的平台編寫監控接口,采用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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved