Получить данные предыдущих дней (скрипт PHP) и отправить данные с помощью Amazon SNS

У меня есть кусок кода, который будет отображать результаты и сравнения ряда (3) запросов к базе данных в браузере. Он отображает различия в цифрах каждой БД. Это работает, и это все в порядке. Теперь я должен забыть о веб-странице и запускать скрипт php раз в день, скажем, в 3 часа ночи, и скрипт должен искать какие-либо различия в показателях БД за предыдущий день. При обнаружении каких-либо различий с помощью Amazon Simple Notification Service всем подписчикам будет отправлено электронное письмо с подробной информацией об этих различиях. Вот часть моего кода, которая была нова из предыдущего рабочего скрипта (для браузера):

if ($total_results) {
foreach ($total_results as $cid => $dates) {

foreach($dates as $row) {
$dbOne_total = $row['dbOne_total'];
$dbTwo_total = $row['dbTwo_total'];
$dbThree_total = $row['dbThree_total'];
$difference = ($dbTwo_total - $dbOne_total);
$difference_bill = ($dbThree_total - $dbOne_total);$mismatchFile = fopen("mismatch.txt", "w");
$issue = "";
while($startDate == date('Y-m-d', strtotime('-1 day'))) {
if (($difference_bill > 0) || ($difference > 0)) {
$issue = ($row["company"] ." ". $row["company_id"]. " ". "dbTwo Difference". " ". $difference. " "."dbThree Difference". " ". $difference_bill);
print_r($issue);
topic("DATABASE-MISMATCH")->send("List of mismatches between databases", "Issue:  $issue/n"); // for ASN

}
}
fwrite($mismatchFile, $issue);
fclose($mismatchFile);
}
}

$ startDate — это переменная, которую я использую в коде, поскольку у меня запущены sql-запросы, которым требуется эта дата для получения информации.
Я ставлю под сомнение эту строку:

while($startDate == date('Y-m-d', strtotime('-1 day'))) {

Я не уверен, что strtotime — лучший вариант (я беспокоюсь о возможных проблемах с форматированием). Есть ли лучший способ получить данные за предыдущий день?

Мне интересно, правильно ли я подхожу к этой проблеме? Я также был бы признателен за любые советы о том, как поместить переменную $ issue в тело электронной почты Amazon SNS в виде списка, или было бы лучше создать файл и отправить его в виде вложения?

Я все еще новичок в PHP, и поэтому любая помощь, или полезный пункт в правильном направлении, будет очень цениться.

0

Решение

while($startDate == date('Y-m-d', strtotime('-1 day'))) это неправильный подход. Всегда возвращается true и цикл бесконечен.

Если вы хотите только один раз day beforeиспользовать

$date = new \DateTime('now - 1 day');
echo $date->format('Y-m-d');

Если вам нужно сделать это в цикле

$date = new \DateTime(); // now here
for($i = 1; $i <= 10; $i++) {
$date->sub(new \DateInterval('P' . $i . 'D'); // $i days before, $i>0
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector