程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 代替bash,書寫PHP daemon (後台程序)

代替bash,書寫PHP daemon (後台程序)

編輯:關於PHP編程

  幫客之家(www.Bkjia.com)教程 最近在雅虎的一個朋友和我說,以前用bash csh 寫腳本, 它現在都在用PHP 寫後台程序,覺得PHP的函數最全,而且很容易用 shell_exec 很容易調用系統內核。

  我和他交流了一下寫後台程序的一些原則,歸納如下。

以下為引用的內容:
function connnect()
{
global $db;
if (is_resource($db)) {
mysqli_close($db);
}
$db = mysqli_connect("122.225.96.142", 'waihui', 'freebsd@fzm', 'waihui');
}

  首先,要去掉以前寫網頁腳本的一些思維習慣。網頁腳本運行一次以後,就馬上釋放內存。而daemon 程序不一樣,它會一直運行一年,甚至幾年。

  1. 作為一個好的習慣,一定要在while (1) {} 這樣一個死循環裡面運行代碼。這樣,只要代碼不出狀況,腳本就不會停止。

  2. echo 不能用,而是用log 代替。用寫日志的方法代替echo。因為echo 是 向 屏幕輸出一個字符,如果沒有任何輸出的對象,就會報一個致命錯誤。

  3. 如果MYSQL,要每次重新連接MYSQL。

  上面就是連接的一個例子。這個代碼曾經被一個高手狠狠的批評了一頓。這個主要是為了防止下面的事情:

  mysql 重啟了,$db 變量肯定還是個資源,但是這個資源已經無效了。如果再執行代碼就會發生:

  mysql has go away 這樣的錯誤。這個會向屏幕輸出,即時關閉錯誤報告也一樣會輸出。這樣導致整個

  腳本運行錯誤,和echo 產生的錯誤一樣。

  雖然每次連接數據庫有些浪費,但是也只能寧可錯殺1000,也不放過一個。這個錯誤,是大多數朋友都會犯的

  錯誤,很多人和我說這個是mysql的bug,因為,本來寫文件好好的,後來連接帶mysql就出錯了。

  其實不是mysql的bug。

  4. 新產生的變量,如果不是自動釋放的,要馬上釋放。否則日積月累,程序就要崩潰。很多PHP程序員沒有一點

  內存管理的概念,覺得內存是無限的,隨便用,寫後台程序一定要注意內存的管理。

  5. 如果要訪問文件,首先要 clearstatcache, 否則很有可能會不精確的統計,或者

  判斷文件是否存在變的不准確了。更要命的是,如果你頻繁打開文件,文件的handle 值會

  不斷增加,等到超過整數的最大值,程序就無法打開文件。很多人的程序,3個月掛一次,

  沒有出現錯誤,也沒有出現內存問題,很有可能就是每次操作文件前,沒有清除statcache。

  轉自:http://www.cnblogs.com/niniwzw/

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