php非同步執行其他程式

來源:互聯網
上載者:User

標籤:代碼   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非同步執行其他程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.