利用Http請求實現PHP異步(laravel5.4)


 前言: 繼上一篇中說的第一種方法實現(自己測試用的,所以一切從簡)

 

 方法的思路:

PHP本身不存在異步功能,所以我們拼接出http請求以及PHP本身自帶的fsockopen、fwrite方法來實現。

 

過程: 

在Controller中創建一個方法,控制器命名為TestController,其中的代碼如下(注釋掉的為post請求,我們先講get請求)

   

http_build_query 方法: 生成 URL-encode 之后的請求字符串(此處用來拼接我們Get請求所要發送的數據)。

fsockopen 方法(重點理解該方法,明白它的作用): 打開一個網絡連接或者一個Unix套接字連接(此為手冊中的描述並不容易理解)。第一個參數為主機名,如果你是在本地測試,可以像我一樣給;第二個參數端口號:給服務器的80端口;

接下去的參數分別是一個存放錯誤編號的變量、一個存放錯誤信息字符串的變量和超時等待時間(此方法可以詳細的去看手冊上的描述以及百度上網友的理解分享)。該方法如果執行成功將會返回一個文件句柄(資源)

之后可以被其他文件類函數調用(例如:fgets()fgetss()fwrite()fclose()還有feof())。如果調用失敗,將返回FALSE

接下來就是拼接的Get請求, 其中的Url即是該http請求請求得路徑,該請求執行的方法如下,該方法向一個文件中寫入拼接的字符串(此處沒有貼出發送郵件的代碼,只需要將此處的內容換成發送郵件以及一系列處理的代碼即可)

    

在瀏覽器中執行第一個路由,完成后馬上會看到頁面顯示的執行完畢,並且文件中有了寫入的字符串,這表示我們的PHP異步Get請求成功了,但是使用get請求發送郵件是不合適的,因為他不能攜帶太多數據,而郵件的內容有可能包含大量的數據

    

所以我們還是需要使用post請求(由於本人的post請求一直不能正常執行成功,並且還未能找到原因,所以不多做闡述,解決了問題便會補上)。

 

總結:

http請求通過fsockopen打開的socket通道利用流的形式發送了請求,並在后台執行,但是這樣做的弊端就是我們沒辦法對其進行監控,只能將想要的結果存到數據庫等,然后再在其它頁面查看記錄的結果

以上純屬個人理解,緊當筆記使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM