Mam skrypt, który jest wykonywany raz dziennie przez cron'a. Chciałem zasymulować jego 30dniowy przebieg i na końcu skryptu doczepiłem coś takiego:
$date = date('Y-m-d', strtotime(date('Y-m-d'). ' + 1 days'));
shell_exec("date --set='" . $date . "'");
Skrypt wysyła różne maile maile do klientów. Kod systemu jest masakrycznie stary, więc wysyłka maila odbywa się za pomocą funkcji phpowej @mail
, a nie smtp i jedyną możliwościa przetestowania tego są takie kombinacje. Problem w tym, że w wszystko działa bardzo dobrze, ale w momencie wysłania maila gubię jeden dzień.
root@arch:/***/cronjobs# php -f __send_demand_for_payment.php
2016-04-11 DPD: 7 // aktualna data systemu
// teraz przed koncem skryptu następuje inkrementacja
root@arch:/***/cronjobs# date
pon, 11 kwi 2016, 00:00:00 CEST // wciąż 11 kwietnia
root@arch:/***/cronjobs# php -f __send_demand_for_payment.php
2016-04-11 DPD: 8 // aktualna data systemu
// teraz przed koncem skryptu następuje inkrementacja i wszystko działa następna iteracja odbywa się z datą 12 kwietnia
Wszystko co może sypać błędem próbowałem owijać trycatchem
. Mało tego, skrypt to nic innego jak pętla foreach, ogólnie rzecz biorąc coś takiego:
foreach(...) {
/// kod..
$dcm->incrementDPD($dc_id);
}
$date = date('Y-m-d', strtotime(date('Y-m-d'). ' + 1 days'));
shell_exec("date --set='" . $date . "'");
Wartości w bazie się inkrementują, więc zakładam, że do momentu wyjścia z pętli wszystko jest ok. Później te dwie linijki niestety nie działają. Próbowałem również sprawdzać datę na początku i w środku i za każdym razem się nie zgadza. Tak jakby nie dodawał tego 1 dnia podczas wysyłania maila.
Może mi ktoś wyjaśnić ten fenomen?
PS. Oczywiście jak robi to cron, to wszystko się zgadza, ciekawi mnie tylko czemu u diabła ta data jest taka uparta :)