php 守護程序的實現

2021-08-14 11:36:40 字數 2150 閱讀 6725

1 php沒有執行在安全模式,關掉安全模式,即:safe_mode = off

2 禁用函式列表 disable_functions = exec, system, shell_exec,proc_open, popen, 一般來說,exec()這些函式為了安全,都會禁用,在php.ini裡面把這些禁用的函式放出來。

注意:執行外部程式是存在風險的,所以使用這些函式要在確保安全的情況下使用。

1.exec()

string exec ( string

command [, array &output [, int &return_var]] )

描述:返回值儲存最後的輸出結果,而所有輸出結果將會儲存到 output陣列,$return_var用來儲存命令執行的狀態碼(用來檢測成功或失敗,通常0是成功,1是失敗)。

<?php

exec('whoami',$output, $status);

var_dump($output);

echo

$status;

exit;

結果:

array(1) 

0

執行多個linux命令,每個命令用『;』隔開。或者用『&』或者『||』隔開(每個符號的意思自己查):

<?php

exec('mkdir e;cd e;touch index.php',$a,$b);

echo

$b;

注意:

① 輸出結果會逐行追加到ou

tput

中,因此

在呼叫e

xec之

前需要u

nset

( output),特別是迴圈呼叫的時候。

② 如果想通過exec呼叫外部程式後馬上繼續執行後續**,僅僅在命令裡加」&」是不夠的,此時exec依然會等待命令執行完畢;需要再將標準輸出做重定向才可以,例如:exec(「ls -al >/dev/null &」, ou

tput

, var);

2.system()

string

system ( string

command [, int &return_var] )

描述:執行給定的命令,返回最後的輸出結果;第二個引數是可選的,用來得到命令執行後的狀態碼。

<?php

system("whoami", $status); // 直接輸出 root

var_dump($status); // 成功時狀態碼是 0

exit;

1.linux的nohup

用途:不結束通話地執行命令。

語法:nohup command [ arg … ] [ & ]

無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。

如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 $home/nohup.out 檔案中。

如果沒有檔案能建立或開啟以用於追加,那麼 command 引數指定的命令不可呼叫。

2. &

用途:在後台執行

一般兩個一起用:

nohup command &

例:

nohup php db.php &
返回程序號

看下有沒有這個程序:

# ps aux |grep php
發現有db.php這個程序.

殺死這個程序:

# kill -9

22069

# 22069是程序號

3.我們寫個db.php檔案,這個檔案是一直出redis佇列,往mysql裡面插入資料的。

exce.php:

<?php

exec("ps aux|grep php", $a, $b); //檢視php程序

$result = ;

if ($b == 0)

}}if (empty($result)) else

} else

守護程序之PHP實現

守護程序 daemon 是一種特殊的程序,它的生命週期很長,它在後台執行並且沒有控制終端 這樣可以保證守護程序不會接收到各種來自終端的訊號 比如 crontab sshd nginx等,都會使用守護程序的形式執行,確保可以一直正常的提供服務。daemon 守護程序 php實現 author zhjx...

php守護程序

class daemon 啟動程序 return bool public function main this logmessage running.this isrunning true while this isrunning return true 停止程序 return void publi...

PHP守護程序

php也是可以直接進行守護程序的啟動與終止的,相對於shell來說會簡單很多,理解更方便,當然了php的守護程序要實現自動重啟還是要依賴於shell的crontab日程表,每隔一段時間去執行一次指令碼看指令碼是否需要重啟,如果需要則殺掉程序刪除runfile檔案,重新啟動並在runfile檔案中寫入...