CakePHP2系でConsoleプログラム実行時のエラー対応
CakePHPの2系でConsoleプログラムを実行しようとすると実行環境によっては
PHP Warning: preg_replace_callback(): Compilation failed: unrecognized character after (?< at offset 4 in lib/Cake/Console/ConsoleOutput.php on line 186
とかって警告が出る場合があります。
これはCakePHPのConsoleOutput.phpで利用されてる正規表現がPCREの7.0からサポートされてるPerl5.10の互換構文に依存してるんで、実行環境のPCREのバージョンが7.0よりも古ければそんな警告が出てしまいます。
単純にPCREのバージョン上げれば問題ないんですがそうもいかない場合は以下のパッチを当ててやればok。
(Ver2.0.2)
diff --git lib/Cake/Console/ConsoleOutput.php lib/Cake/Console/ConsoleOutput.php index a6cfd7d..80659fb 100755 --- lib/Cake/Console/ConsoleOutput.php +++ lib/Cake/Console/ConsoleOutput.php @@ -182,7 +182,7 @@ class ConsoleOutput { return preg_replace('#</?(?:' . $tags . ')>#', '', $text); } return preg_replace_callback( - '/<(?<tag>[a-z0-9-_]+)>(?<text>.*?)<\/(\1)>/ims', array($this, '_replaceTags'), $text + '/<(?P<tag>[a-z0-9-_]+)>(?P<text>.*?)<\/(\1)>/ims', array($this, '_replaceTags'), $text ); }
パターンの記述をPCREの4.0からサポートされてるPython互換の構文にしてやっただけです。
詳細はPCREのchangelogをどうぞ。
http://www.pcre.org/changelog.txt