大家都知道php執行系統命令的方法有:
system() 輸出並返回最後一行shell結果。
exec() 不輸出結果,返回最後一行shell結果,所有結果可以儲存到乙個返回的陣列裡面。
passthru() 只呼叫命令,把命令的執行結果原樣地直接輸出到標準輸出裝置上。
這些方法都會等待命令執行完畢後才會繼續執行後續的程式
不阻塞可以將命令輸出的內容寫入系統的乙個**站檔案,這樣程式就不會阻塞
例如:
shell_exec("/usr/local/php/bin/php /www/t.php > /dev/null 2>&1 &");//可以執行
exec("/usr/local/php/bin/php /www/t.php > /dev/null 2>&1 &");//可以執行
shell中可能經常能看到:>/dev/null 2>&1
命令的結果可以通過%>的形式來定義輸出
/dev/null 代表空裝置檔案
代表重定向到**,例如:echo 「123」 > /home/123.txt那麼本文標題的語句:1 表示stdout標準輸出,系統預設值是1,所以」>/dev/null」等同於」1>/dev/null」
2 表示stderr標準錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1
1>/dev/null 首先表示標準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,說白了就是不顯示任何資訊。
2>&1 接著,標準錯誤輸出重定向等同於 標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。
PHP非阻塞執行方法
正常訪問乙個a方法,a方法需要立即返回,但是a方法會呼叫乙個b方法,b方法可能會阻塞執行很長時間 或者b方法是定時任務 使用fsockopen方法,請求b方法的url,並設定為非阻塞模式傳送請求 fsockopen test.php 非阻塞請求 param url return bool funct...
解決php的exec 不執行shell命令的問題
最近遇到乙個問題,客戶會同時輪詢修改上百條資料,併發性又很高,但又不是很頻繁地使用,於是寫了乙個悲觀鎖,使用佇列在後台非同步處理,使用exec主動觸發任務。public function lock test 1.這裡使用exec主動觸發任務 也可以使用system呼叫sh指令碼,指令碼中也要將返回寫...
php執行shell指令碼
原文 php作為一門伺服器端指令碼語言,也是可以呼叫系統命令的,這其中就包括了執行shell指令碼 編寫test.sh指令碼如下 bin sh mkdir www a 很簡單的乙個shell指令碼 建立乙個資料夾 php指令碼如下 system usr bin test.sh 在執行前 首先需要驗證...