2016-03-07 335 views
-1

我目前在使用PHP。我只是想出瞭如何使用PHP發送電子郵件(需要做一些後端的東西來運行它)。這個想法現在很簡單:Php在達到閾值後發送郵件,但只發送一次。每分鐘運行服務器端cronjob

1)每分鐘,一個cronjob計劃執行「x.php」。這個PHP腳本從外部服務器獲取數據。 2)如果數據的值低於15,我需要腳本向我發送電子郵件。 3)但是,如果此值在15以下保持一段時間,我不希望每分鐘都會發送垃圾郵件,所以它只應該給我發一次通知,然後每次價值超過15,然後再低於15。

我的代碼如下。我意識到,這將不起作用,因爲$ sentMail = 1;將在每次運行腳本時執行。但我怎麼能做到這一點?$ sentMail = 1;在您的幫助:)

編輯

if ($nettoValue < 15) { 


      if ($sentMail == 1) { 
       $subject = 'Dit is de titel van het test bericht'; 
       $email = 'Dit is de inhoud van het test bericht'; 
       $to = '[email protected]'; 
       $from = '[email protected]'; 

       $headers = array(); 
       $headers[] = "MIME-Version: 1.0"; 
       $headers[] = "Content-type: text/plain; charset=iso-8859-1"; 
       $headers[] = "From: bla <{$from}>"; 
       $headers[] = "Reply-To: bla <{$from}>"; 
       //$headers[] = "Subject: {$subject}"; 
       $headers[] = "X-Mailer: PHP/".phpversion(); 

       mail($to, $subject, $email, implode("\r\n", $headers), "- f".$from); 
       $sentMail = 0; 
      } 
      else {} 
     } 

     if ($nettoValue > 15) { 
      $sentMail = 1; 
     } 

感謝:所以顯然我還是做錯了什麼,我只要這個腳本是在頁面得到了一個服務器錯誤:

if ($nettoValue < 15) { 
       $fname = "/httpdocs/sentmail.txt"; 
       $fhandle = fopen($fname,"r"); 
       $sentMail = fread($fhandle,"1"); 
       fclose($fhandle); 

       if (strcmp($sentMail,'1')==0) { 
        $subject = 'Test'; 
        $email = 'Test'; 
        $to = '[email protected]'; 
        $from = '[email protected]'; 

        $headers = array(); 
        $headers[] = "MIME-Version: 1.0"; 
        $headers[] = "Content-type: text/plain; charset=iso-8859-1"; 
        $headers[] = "From: BECC <{$from}>"; 
        $headers[] = "Reply-To: BECC <{$from}>"; 
        //$headers[] = "Subject: {$subject}"; 
        $headers[] = "X-Mailer: PHP/".phpversion(); 

        mail($to, $subject, $email, implode("\r\n", $headers), "-f".$from); 

        $fname = "/httpdocs/sentmail.txt"; 
        $fhandle = fopen($fname,"w"); 

        fwrite($fhandle,"0"); 
        fclose($fhandle); 
       } 
       else {} 
      } 

      if ($nettoValue > 15) { 
       $fname = "/httpdocs/sentmail.txt"; 
       $fhandle = fopen($fname,"w"); 

       fwrite($fhandle,"1"); 
       fclose($fhandle); 
      } 

我注意到的一些事情:文件沒有被寫入,所以可能不會讀取。如果我刪除了sentMail == 1的if語句,我會立即收到一封電子郵件。我該怎麼辦?

+1

將當前數字放在一個文件中,使用fopen(),fputs(),fclose()。然後,當腳本再次啓動時,將此值與當前值進行比較。 – lordgun

+0

您需要以某種方式存儲以前的值,並且只有在以前的< 15 && new > 15',文件/數據庫是您的選項 –

+0

時我纔會查看fopen(),fputs()和fclose()函數。感謝提示傢伙!〜 –

回答

0

明白了。代碼很好,但是crontabs不允許自動編輯其他文件。如果我手動運行腳本,它確實會發送一封電子郵件。

相關問題