2016-08-19 4 views
0

У меня есть форма записи события, которая позволяет вам ежемесячно устанавливать событие, которое будет повторяться в определенную дату. Все работает отлично, пока вы не остановите его в декабре. Когда вы его сохраняете, похоже, что на некоторое время загружается, но потом в конечном итоге падает.Сбой сценария повторяющегося сценария PHP, когда установлен на декабрь

Установка его на остановку в любой другой месяц отлично работает мгновенно. Он возвращает ошибку 500, поэтому я не думаю, что это проблема с таймаутом (этот сайт возвращает уведомление о тайм-ауте, когда это так).

Вот код

if ($_REQUEST["Daily"] == 'numbered') { 
    $endMonth = $_REQUEST['month']; 
    $exd = $_REQUEST['everyXdays']; 
    $inter = '-1'; 
    if (($_REQUEST['everyXdays'] != '-1') && ($_REQUEST['everyXdays'] != $date1->format('d'))) { 
     $date1->setDate($date1->format('Y'),(int) $_REQUEST['month'],(int) $_REQUEST['everyXdays']); 
    } 
    for($date; $date->format('m') <= $endMonth; $date->add(new DateInterval('P1M'))) { 
     $eventDays[] = $_REQUEST['everyXdays'] < '0' 
      ? $date->format('Y-m-t') 
      : $date->format('Y-m-').str_pad($_REQUEST['everyXdays'],2,"0",STR_PAD_LEFT); 
    } 
} 

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

Второй оператор IF говорит, что если «everyXdays» не совпадает с исходной датой начала родителя, установите день как «everyXdays».

Цикл FOR - это то, что создает массив событий. $ date - это исходная дата начала, которая увеличивается на каждый цикл, а $ date1 - дата последнего события события.

Функция затем вставляет их все в базу данных. Я не включаю функцию, потому что, как я сказал ранее, она отлично работает, когда она настроена на любой другой месяц. Поэтому я уверен, что это не проблема.

+0

что сообщение об ошибке об ошибке сообщает об ошибке? – RamRaider

+0

PHP Неустранимая ошибка: допустимый размер памяти 67108864 байт исчерпан (пытался выделить 72 байта) Может ли это быть просто распределение памяти? Вы также можете настроить его на повторную неделю, и это создает больше примеров. Что вызывает это? – arch649

+0

выглядит как утечка памяти, поэтому посмотрите на цикл – RamRaider

ответ

0

Я не уверен, так как я не могу запустить php-код сейчас, но я думаю, что если вы выберете декабрь, $ endMonth получит значение 11, но $ date-> format ('m') равно 12, цикл не запускается за один раз.
Можете ли вы проверить эту ошибку?

+0

Фактически значение $ endMonth установлено на 12 декабря. Таким образом, они соответствуют. – arch649

0

ФИКСИРОВАННЫЙ: Цикл for был только по сравнению с месяцами. Поэтому, когда цикл зациклится до января, он будет сравнивать только январь-декабрь. С января < Дек цикл продолжится. Изменение условия for из формата $ date-> ('m') < = $ endMonth; to $ date-> format ('Y-m') < = $ date1-> format ('Y -'). $ endMonth; это факторы в этом году. Теперь он останавливается, когда $ date входит в новый год.