標籤:代碼 inux nbsp user tran 就會 etop 一個 abort
這裡的“其他程式”,可能是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非同步執行其他程式