メモ 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のプロセスのメモリ内に何か変なデータが残っているような挙動でしょうか・・・・。
環境: