1. 程式人生 > >php異步執行其他程序

php異步執行其他程序

user ajax linux pen ignore curl 設置 缺失 開啟

這裏的“其他程序”,可能是linux命令,可能是其他的php文件。

網上說法有四種。分別為:

1、通過加載頁面的時候通過ajax技術異步請求服務器

2、通過popen()函數

3、通過curl擴展

4、通過fscokopen()函數

說說我的看法!

通過ajax技術

不推薦

若需要異步執行的“程序”太過於耗時,而用戶此時若關閉了瀏覽器的話,一般如果沒有做什麽特殊配置或者服務器端代碼沒有做特殊處理的話,服務器端的代碼會終止執行。這就導致了這個“程序”執行並不完整,造成數據缺失,會對項目有影響。

當然,如果說在代碼中加入ignore_user_abort(true)方法的話,是可以忽略瀏覽器是否關閉而將該腳本執行完。

通過popen()函數

待驗證

我驗證過了該方法,怎麽弄都不行。在php.ini中已經開啟了popen方法,且需要執行的php腳本也是設置權限為777了,但是不知道為什麽就是執行不成功

通過curl擴展

驗證可行

1 $ch = curl_init();        
2 $curl_opt = array(
3     CURLOPT_URL=>‘hostname/syncStock.php‘,
4     CURLOPT_RETURNTRANSFER=>1,
5     CURLOPT_TIMEOUT=>1,);        
6 curl_setopt_array($ch
, $curl_opt); 7 $out = curl_exec($ch); 8 curl_close($ch);

原理:通過curl去調用一個php腳本,如果響應時間超過了1秒鐘,則斷開該連接,程序繼續往下走而syncStock.php這個腳本還在繼續往下執行。

缺點:必須設置CURLOPT_TIMEOUT=>1這個屬性,所以導致客戶端必須至少等待1秒。但是這個屬性不設置又不行,不設置的話,就會一直等待響應。就沒有異步的效果了。

通過fscokopen()函數

待驗證

php異步執行其他程序