2017-03-10 72 views
0

我有一個php腳本(插件),這是在我的網站導入一些產品。要導入產品,我不得不使用執行此導入的兩個鏈接。調用一個URL並繼續如果沒有響應

第一個URL退出以觸發導入。此網址解鎖第二個網址以導入產品。如果導入完成,第二個URL退出以執行導入,則該URL將顯示一個代碼(200)。

我現在的問題是,我如何檢查例如如果第二個URL返回200,則每30秒鐘一次? - 因爲這是識別導入是否完成的唯一方法。

我已經試過fopen(..),但問題在於我的腳本被阻止,因爲fopen沒有得到回報。

所以我需要的是一個函數或代碼,它檢查例如如果第二個URL在10秒後返回某些內容,並且如果不是,則代碼將休眠30秒並再次檢查。只有當我返回200時,我才能退出這個循環。

正如我所說,我已經嘗試fopen(..),但此功能停止我的腳本。我的第二種嘗試方式是捲曲。但問題還有,我剛回國不檢查,如果我得到的東西......在這裏我捲曲代碼:

$ch = curl_init("https://myurl.de/"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $content = curl_exec($ch); 
    curl_close($ch); 
+0

它可能通過使用cli腳本while(true)和sleep(300); – bader

回答

1

你將不能夠做到這一點使用PHP本身 - 只要你不想要執行阻止I/O-的進程。

你可以使用javascript的setIntervalsetTimeout的一些幫助來解決這個問題。

<script> 
    var timer = setInterval(function() { 
     // executing some ajax to call php url 
     // which is check for the response status 
     $.ajax({ 
     .... 
     success: function(data) { 
      // check if the response is finished 
      clearInterval(timer); 

     } 
     .... 
     }); 
    }); 
</script> 
+0

以及如何檢查URL是否返回200並將此信息傳遞給我的cron腳本? –

0

我認爲這種方式(使用循環和捲曲調用)是不可預知和不可擴展的。如果你每秒會有很多進口操作會怎麼樣?如果你有很長的時間進口操作會怎麼樣?我認爲您必須使用某個庫來創建和處理後臺作業(queueing systems),並且您的服務器必須使用套接字與瀏覽器(用戶)通信(例如,NodeJS)。

相關問題