這兩天碰到一個小問題卡了我老半天……就是LINUX下PHP程式與其他程式通訊。
我們需要實現使用者在WEB頁面上進行操作時可以啟用我們在伺服器端的背景程式(用C、C++編寫)。
之前在windows下,已經使用具名管道實現(請見我之前的博文http://blog.csdn.net/rcfalcon/archive/2010/02/09/5303142.aspx),這次將伺服器整體移往LINUX下。
伺服器環境 CentOS 5 + apache + mysql + php
於是乎基本按照之前的代碼架構,很快就在伺服器端調通了。(但是我是使用的root使用者直接啟動並執行PHP指令碼測試的)
但是後來測試通過WEB訪問的時候,提示說拿不到具名管道的許可權。
於是乎開始解決這個問題……
修改php.ini的open_basedir等設定,未果。
修改httpd.conf的若干設定,未果。
將具名管道chmod 777,未果。
將apache伺服器使用者組設成 root,未果。
再將命名管管道chown apache:root,未果。
嘗試PHP讀寫普通檔案,沒問題。
翻PHP官方手冊,未發現問題。
於是乎我開始抓狂了。
把百度、google都翻了10多頁,也找不到正確答案。。。
最後開始翻國外的編程論壇,終於看到有個人跟我情況類似。但是他說他把httpd換了個目錄然後restart service就行了,照著嘗試,未果……
最後看到有人說可能是SELINUX的問題,我在崩潰之餘懷著最後一絲希望把SELINUX禁了,然後重啟。
首先是一切正常,
然後GNOME居然報了一堆錯,不管了,繼續
然後……
居然可以了!
萬惡的SELINUX……
原來centos5、RHEL、FEDORA等內建的預設安裝SELINUX,其在很大的程度上加強了整個LINUX系統的安全性。但是很多使用者權限上受到限制,比如在我這個問題中,就是其把apache使用者的具名管道讀寫權限給關閉了。
看來還是需要惡補 LINUX啊,太菜了~