メモ Warning: range() [function.range]: step exceeds the specified range in sfYamlDumper.php on line 43

突然表題のようなWarningが出るようになったのでメモ。

Warningの箇所はsymfonyライブラリのsfYamlDumper内のコードで、range関数を使っている箇所です。
が、以下のような状況なので、なぜここでWarningが出るのかさっぱり分かりません。

  • sfYamlDumperへ渡る値とはほぼ無関係の場所(例えばProjectConfigurationのsetup()の先頭など)で、以下のようなコードを追加するとWarning
<?php
$date1 = new DateTime();
$date2 = new DateTime('2010-03-18 01:30:28');
$diff = $date1->diff($date2)->format('%d');
  • 上記コードで、3行目のformatメソッドの実行部分を削ると、Warningは出ない
  • (今のところ)Windows版でのみ現象を確認(PHP 5.3.1)
  • Apacheを再起動すると、再起動後の初回、2回目のアクセスではWarningは出ないが、3回目以降はずっと出る。
  • apcを無効にしても有効にしても同じ。
  • xdebugを無効にしても有効にしても同じ。
  • 現象が再現するようになった場合、プログラム内の適当な箇所に「range(0,1,1);」と入れるだけでその箇所でWarning
  • 以下の単純なコード(symfony外の単純なPHPスクリプト)では、Warningは出ない
<?php
$date1 = new DateTime();
$date2 = new DateTime('2010-03-18 01:30:28');
$diff = $date1->diff($date2)->format('%d');
print_r(range(0,1,1));
  • 上記テストコードをタスクの中で実行してもWarningは出ない
  • サラのプロジェクト(generate:project、generate:app frontend、generate:module frontend testのみ)で、上記コードをProjectConfigurationの先頭に記述すると、Warningが出る
    • このWarningが出るプロジェクトにブラウザでアクセスした後、Warningが出ないように修正(formatを使わない)したプロジェクトにアクセスすると、なぜかWarningが出た。リロードするとWarningは消える。


同じ現象に遭遇した方がチケットを投げていました


Apacheのプロセスのメモリ内に何か変なデータが残っているような挙動でしょうか・・・・。


環境: