2015-07-12 71 views
2

我正在爲我的小組製作一個網站,該小組託管着幾個遊戲服務器。在這個過程中,我創建了一個網站來查看服務器,並作爲回報顯示它是否啓動或關閉。我希望能夠說如果發生故障,你可以給我發電子郵件。該部分起作用。我不想要的是讓用戶在發送一次郵件後能夠給我發送電子郵件。PHP網站的動態時間

我想知道如果我能以某種方式創建一個腳本,當任何用戶點擊鏈接給我發電子郵件時,其他用戶可以給我發電子郵件約一個小時。我認爲這必須是服務器端的東西。我過去製作了一個腳本,並且它有效,當有人點擊鏈接時,它會增加一個小時。問題是,當用戶回到那個目錄時,他們可以再次點擊它,因爲時間沒有保存。我也希望如果多個用戶同時點擊鏈接,它只會增加1小時,而不是多個(例如,3個用戶在網站上2個用戶點擊通知它會增加2個小時而不是1個)

任何正確方向的提示都會很棒。我想過使用MySQL,但是除非絕對需要,否則不想這麼做(不知道數據庫設置的可能性如何)

+0

可能是我們可以設置一個標誌。在添加1小時之前,您可以檢查標誌是否已經設置。 – GaurabDahal

+0

用sql做這件事真的很容易。我只需將電子郵件時間數據庫,然後在電子郵件頁面中檢查數據庫時間,以查看他們是否可以再次發送電子郵件。除非你想讓電子郵件生成,然後在一個小時後才發送。這會更復雜。 –

回答

1

另一種選擇是在服務器上的某個位置放置一個文件,該文件包含將最後發送的消息寫入其中,然後將其與當前時間進行比較。這裏有一個粗略的例子(注意,這個示例是不安全的,需要接受原始用戶輸入之前將被拆除,但希望它會爲你指明正確的方向):

<?php 
send_email(); 

function maindir() { 
    // This will need to be set to the directory containing your time file. 
    $cwd = '/home/myusername/websites/example.com'; 
    return $cwd; 
} 

function update_timefile() { 
    $cwd = maindir(); 
    // The file that will contain the time. 
    $timefile = 'timefile.txt'; 
    $time = time(); 
    file_put_contents("$cwd/$timefile", $time); 
} 

function send_email() { 
    // Note: this should be sanitized more and have security checks performed on it. 
    // It also assumes that your user's subject and message have been POSTed to this 
    // .php file. 
    $subject = ($_POST && isset($_POST['subject']) && !empty($_POST['subject'])) ? $_POST['subject'] ? FALSE; 
    $message = ($_POST && isset($_POST['message']) && !empty($_POST['message'])) ? $_POST['message'] ? FALSE; 
    if ($subject && $message) { 
    $to = '[email protected]'; 
    $cwd = maindir(); 
    $timefile = 'timefile.txt'; 
    // Current time 
    $timenow = time(); 
    // Read the time from the time file 
    $timeget = file_get_contents("$cwd/$timefile"); 
    // Calculate the difference 
    $timediff = $timenow - $timeget; 
    // If the difference is greater than or equal to the current time + 3600 seconds.. 
    if ($timediff >= 3600) { 
     // ... and if the message gets sent... 
     if (mail($to, $subject, $message)) { 
     // ... update the time file. 
     update_timefile(); 
     } 
    } 
    } 
}