php 非同步執行指令碼

2022-08-14 01:57:12 字數 997 閱讀 4164

這裡說的非同步執行是讓php指令碼在後台掛起乙個執行具體操作的指令碼,主指令碼退出後,掛起的指令碼還能繼續執行。比如執行某些耗時操作或可以並行執行的操作,可以採用php非同步執行的方式。主指令碼和子指令碼的通訊可以採用外部檔案或memcached的方式。原理就是通過exec或system來執行乙個外部命令。注意:本文所述的是針對linux環境。

在linux下要讓乙個指令碼掛在後台執行可以在命令的結尾加上乙個 「&」 符號,有時候這還不夠,需要借助nohup命令,關於nohup,可以參考

cli環境和web環境執行的操作還不太一樣。先來說cli環境,這裡需要用上nohup和&,同時還要把指定輸出,如果不想要輸出結果,可以把輸出定向到/dev/null中。現在來做乙個測試,假設在乙個目錄中有main.php、sub1.php和sub2.php,其中sub1和sub2內容一樣都讓sleep函式暫停一段時間。**如下:

上述檔案中main.php是作為主指令碼,在命令列中執行php main.php,可以看到main.php指令碼很快就執行完並退出。在使用ps aux | grep sub命令搜尋程序,應該可以在後台看到上述的兩個子指令碼,說明成功掛起了子指令碼。

在web環境下,執行php指令碼都是web伺服器開啟的cgi程序來處理,只要指令碼不退出,就會一直占有該cgi程序,當啟動的所有cgi程序都被占用完後就不能在處理新的請求。所以對那些可能會很費時的指令碼,可以採用非同步的方式。啟動子指令碼的方式和cli差不多,必須要使用&和指定輸出(只好是定向到/dev/null),但是不能使用nohup。例如:

當在瀏覽器中訪問該指令碼檔案,可以看到瀏覽器裡面響應完成,同時使用ps命令檢視後台可以看到sub1和sub2指令碼。

注意上述例子中如果php命令不在path中,需要指定命令完整的路徑。推薦使用完整路徑,特別是在web下。

前端 async非同步執行指令碼

在傳統模式下,瀏覽器會按照從上到下的方式解析html元素 解析到一直到解析完成之前都不會解析處理元素之後的內容 假設某匯入的指令碼檔案非常耗時就會導致瀏覽器無法向下執行,頁面將長時間顯示一片空白,這不是使用者希望看到的效果,這時候就需要用到的async屬性了 async屬性指定的會啟動新執行緒,非同...

PHP 用root執行指令碼

1 首先寫個c程式,命名為 run.c 放在目錄 var www下 用來互動uuid 執行 include include include include int main uid t uid euid char cmd 1024 變數暫時未使用 uid getuid euid geteuid pr...

自動執行指令碼

乙個偶然的機會,發現了自動執行指令碼的東東,真是神奇啊,可以執行sql 控制台命令等。由於研究的時間有限,所以知之甚少 先和大家分享下,哈 dim consoleprocess as new system.diagnostics.process consoleprocess.startinfo.fi...