2016-08-19 7 views
0

イベントの入力フォームを使用して、指定した日付に毎月繰り返すようにイベントを設定できます。あなたが12月に停止するまで、すべてうまく動作します。それを保存すると、しばらくの間ロードされているように見えますが、最終的にはクラッシュします。PHP定期的なイベントスクリプトが12月に設定されたときにクラッシュする

他の月を停止するように設定すると、すぐに更新が完璧に更新されます。それは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); 
    } 
} 

です。その後、元の親はイベントの最終インスタンスに設定されます。基本的に、親は日付範囲の最後に移動し、その背後に子インスタンスを作成します。

2番目のIF文では、「everyXdays」が親の元の開始日と同じでない場合、その日を「everyXdays」と設定します。

FORループは、イベントアレイを作成するものです。 $ dateは各ループでインクリメントする元の開始日で、$ date1は最終イベントインスタンスの日付です。

関数は、それらをすべてデータベースに挿入します。私は以前に言ったように、それが他の月に設定されているときは完璧に動作するので、関数を含めません。だから私はそれが問題ではないと確信しています。

+0

errorlogはエラーについて何を通知しますか? – RamRaider

+0

PHP致命的なエラー:67108864バイトのメモリサイズが使い果たされました(72バイトを割り当てようとしました)本当に単なるメモリ割り当てですか?毎週繰り返すように設定することもできます。これにより、さらに多くのインスタンスが作成されます。その原因は何ですか? – arch649

+0

はメモリリークのように見えますので、ループを見てください – RamRaider

答えて

0

私はPHPのコードを今実行できないので確信していますが、12月を選択すると$ endMonthは値11を取得しますが、$ date-> format( 'm')は12です。ループは1回実行されません。
このバグを確認してください。

+0

実際に$ endMonthの値は12月に12に設定されます。だから彼らはマッチする。 – arch649

0

固定:forループは数ヶ月しか比較していませんでした。ループが1月に刻み目をつけると、1月から12月までしか比較されません。 Jan < Dec以降、ループは続行されます。 for条件を$ date-> format( 'm')から変更する< = $ endMonth; $ date-> format( 'Y-m')< = $ date1-> format( 'Y - ')$ endMonth;その年の要因。これで、$ dateが新しい年に入ると停止します。

関連する問題