Попытка отладить некоторые проблемы с пресловутым псевдо-кроном WordPress. Мысль о том, чтобы поместить это в WordPressAnswers, но я думаю, что это меньше о WP и более базовом PHP-вопросе о foreach, который, кажется, никогда не прошел свой первый запуск. (Да, определенно посмотрел на кучу подобных вопросов, но никакой любви там, извините.)Почему этот цикл PHP foreach выполняется только один раз?
Вот код с тремя контрольными точками, где я добавил выход для тестирования. Я включаю весь код всего в цикл, просто чтобы быть тщательным, хотя большинство из них, вероятно, не относится к делу. Контрольные точки 2 и 3 никогда не отображаются для меня, а контрольная точка 1 отображается только один раз (т.е. на первой итерации цикла). Не показано, где я выводил $ crons и считал ($ crons) для хорошей оценки, чтобы подтвердить, что да, у него абсолютно много элементов.
foreach ($crons as $timestamp => $cronhooks) {
echo("<br>loop for timestamp " . $timestamp); // checkpoint 1
if ($timestamp > $gmt_time) {
break;
}
foreach ($cronhooks as $hook => $keys) {
echo("<br>loop for hook " . $hook); // checkpoint 2
foreach ($keys as $k => $v) {
$schedule = $v['schedule'];
if ($schedule != false) {
$new_args = array($timestamp, $schedule, $hook, $v['args']);
call_user_func_array('wp_reschedule_event', $new_args);
}
wp_unschedule_event($timestamp, $hook, $v['args']);
do_action_ref_array($hook, $v['args']);
// If the hook ran too long and another cron process stole the lock, quit.
if (_get_cron_lock() != $doing_wp_cron) {
echo("quitting!"); // checkpoint 3
return;
}
}
}
}
Все выходной я получаю от этого, несмотря на мои 5 элементов, является:
петля для временной метки 1382968401
Я буду благодарен за дополнительные глаза на то, что Я скучаю. Я на 95% уверен, что это ключевой код WP, за исключением моих контрольных точек, хотя по разным причинам не исключено, что другой программист тут же обмахивал здесь в конце нашей системы контроля версий. Очевидно, совершенно другая проблема!
Какова ценность '$ gmt_time'? – geomagas
устанавливается через microtime (true). в этот момент, за другую контрольную точку выхода выше в моем коде, 1382918286.117 – Sapphireblue
Знал это ... См. мой ответ ниже. – geomagas