一部のユーザーがアプリケーションから追い出されたかどうかを検出するCronスクリプトがあります。特定の値が1の場合、これを検出できますが、ストリームでは、新しいエントリは設定されません。スクリプトは1時間ごとに実行されます。ほとんど非検出されます。しかし、2012-10-31 23:59:03以降、すべてのユーザーが検出されました。ローカルマシンで、またはcronが実行するのと同じマシンでスクリプトを実行した場合。すべてが適切に処理されました。まず最初に、スクリプト:
require_once ('cron_init.php');
ini_set('date.timezone', 'Europe/Berlin');
ini_set('max_execution_time', 30);
ini_set('memory_limit', -1);
error_reporting(E_ALL);
ini_set("display_errors", 1);
Zend_Date::setOptions(array('fix_dst' => true));
$userinfos = new Repricing_Dbservices_Userinfos();
$users = $userinfos->getUsersForRepricing();
$repricingstream = new Repricing_Dbservices_Repricingstream();
$error = new Repricing_Dbservices_Error();
if($users!==false AND count($users)>0){
$counter = 0;
$errCounter = 0;
$jetzt = new Zend_Date();
$jetzt->setTimezone('Europe/Berlin');
$jetzt = $jetzt->get(Zend_Date::TIMESTAMP);
foreach($users as $user){
$stream = $repricingstream->getStreamLimit($user);
$last = new Zend_Date($stream);
$last->setTimezone('Europe/Berlin');
$last = $last->get(Zend_Date::TIMESTAMP);
$diff = (($jetzt-$last)/60);
$error->setError(1, 'DIED', $diff, $user);
if($diff > 50 ){
$errCounter++;
$userinfos->setUserFree($user);
$error->setError(1, 'DIED', 'ANSTOSSEN', $user);
}
$counter++;
}
$error->setError(1, $errCounter, 'ANSTOSSEN_ALL', 'ALL');
}
通常$diff >= 0 AND $diff <= 4
ですが、検出されましたが、それ$diff
は常に約381595
です。cron$diff
が不足している場合は、当然のことです。また、それ$jetzt
は今(そうあるべき$last
ですが)ずっと後のことであることがわかりました。381595
後で。しかし、そうすべきではありません。最後のストリーム日付は完全に正常です。のこの動作を理解することはできません。cronを使用したZend_Date。2012-10-21 23:59:03
スクリプトを2週間実行することをお勧めします。どうして説明できない。あなたはできる?