2017-07-03 28 views
0

我得到了一個簡單的表單發送電子郵件,現在我面臨一個問題,即時通訊從2個不同頁面獲取變量發送到同一個php頁面提交電子郵件。這兩個變量都通過ajax發送。 1部分是一個數組,另一部分是確認變量,頁面A的數組電子郵件發送到waiting.php頁面,頁面B也發送1個值給waiting.php。暫停php變量一個小時然後執行條件

<?php 
$groupD = "yesy";//$_GET["info"]; 

    //sleep (60); 
    foreach ($groupD as $gtm) { 
    $message .= $gtm; 
    $test .= $mail[9]; 
    echo $test; 

    } 
$groupx = $test; 
$groupz = "someting "; //$_GET["confirm"]; 
$datetime1 = new DateTime($test); 
$datetime2 = new DateTime(); 
$interval = $datetime1->diff($datetime2); 
//echo $interval->format('%h'); 

if ($interval->format('%h') > 1) { 
if (!is_null($groupx) & !is_null($groupz)){ 
/// mail function 

    } 
else{ 
    echo "false empty fields"; 
} 
} 
else{ 
    echo "time false"; 
} 


?> 

它會甚至工作,如果我使用睡眠類從PHP。頁面A有提交時間從數組中取出,所以我可以間隔使用它,我的問題是,如果我保持這兩個變量被擱置,一小時後,釋放或哪個是最好的方法,將高度appriciate你們幫幫我。

,這裏是我的js

<script> 
    $(document).ready(function() { 
    var msg = google_tag_manager["GTM-xxx"].dataLayer.get('hPackageId'); 
    var msg1 = google_tag_manager["GTM-xxx"].dataLayer.get('hPackageTotal'); 
    var msg2 = google_tag_manager["GTM-xxx"].dataLayer.get('hUserName'); 
    var msg3 = google_tag_manager["GTM-xxxx"].dataLayer.get('hUserLastName'); 
    new Date(Date.parse).toUTCString() 
    var d = new Date(); 
    d.setTime(d); 
    var msg4 =(d.toString().slice(0, 24)); 
    var getall = [msg, msg1, msg2, msg3, msg4]; 
    // console.log(getall); 

    $.ajax({ 
    type: "GET", 
    url: "mypagepage.php", 
    data:{info: getall}, 
    datatype: 'html', 
    success: function(data) {} 
    }); 

    }); 

</script> 

兩個腳本通過AJAX由於我的情況下發送的,一頁一頁B具有相同sintac

+1

一個腳本中的常規變量在另一個腳本中不可見。在第一個腳本中設置會話變量,然後在第二個腳本中使用它。 – Barmar

+0

我編輯我的帖子,所以你可以看到我的js scritp –

+0

JS代碼大多不相關,這是在PHP中完成的。 – Barmar

回答

1

腳本語言如PHP通常被設計爲一個單獨的迴應網頁(如https)請求並做點什麼馬上。我在PHP腳本中使用sleep()時,它們在後臺運行,但這是一種不同類型的設置。延遲一個常規腳本可能工作,但會導致額外的進程運行 - 例如,如果100個人在一個小時內使用該頁面,則將有100個進程同時運行。儘管大多數進程會睡眠(不會浪費CPU週期),但在內存,進程描述符等方面仍然是服務器上的重要負載。

如果我正確理解問題,則需要處理多個部分的交易,導致電子郵件在完成或更改的一小時等待時間後發送。我建議使用數據庫(例如MySQL)來存儲每個請求的信息。有一個單獨的過程 - 例如,一個小時自動運行cronjob - 從數據庫中讀取所有未發送電子郵件的信息,發送電子郵件並更新數據庫,以便電子郵件在一小時後不會再發送。

+0

你理解正確,基本上來自2個不同頁面的信息si頁面A提交正確的方式頁面B最多延遲1小時,當我有兩個變量時,我將根據信息進行小部件。我只能訪問前端開發人員無法訪問數據庫 –

+0

@walteralexander正確執行此操作需要某種存儲空間。如果你不能使用MySQL實例,那麼使用本地(但不是臨時)文件。您可以擁有一個包含所有待處理事務的大文件或每個事務一個文件。添加一個作爲cronjob運行的進程,或者作爲一個窮人的cronjob,在另一個進程結束時添加一個測試(因此它不會延遲用戶顯示) - 實質上「檢查具有未決事務的文件並處理任何超過一個小時的時間,還沒有被處理「 - 沒有可見的輸出(即只是文件更新和電子郵件)。原油,但我已經做到了。 – manassehkatz

+0

thnks我會試一試 –

相關問題