Zmiana daty systemowej z poziomu skryptu php

0

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 :)

0

to chyba najgłupszy sposób jaki można było wymyślić - to tak przy okazji :p

$date = date('Y-m-d', strtotime('2016-04-11'. ' + 1 days'));
die($date); // 2016-04-12

więc trochę głębiej to debuguj - zobacz co zwraca shell_exec, ręcznie weryfikuj datę systemową przed wywołaniem, printuj ją sobie w php przed modyfikację itd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1