PHP: syntax error, unexpected TC_CONSTANT in /path/to/php.ini on line ****
昨日の大掛かりな変更を調べてみようと思って5.2.5と5.3-devをビルドしてみたら、認識が間違っていた事に気がつきました。。。これは恥ずかしい。_| ̄|○
それはさておき、5.3-devではphp.iniファイルのパース処理が厳密になるのかも。。。という事に気がつきました(不適切?な場合はエラーが表示されるようになった)。
% ./php-5.2.5-cli -c /path/to/php.ini -h > /dev/null % ./php-5.3-dev-cli -c /path/to/php.ini -h > /dev/null PHP: syntax error, unexpected TC_CONSTANT in /path/to/php.ini on line ****
同じphp.iniファイルをパースしているのにエラーが出るのは5.3-devダケ。
php.iniファイルの該当ラインは「apc.filters = no value」になっていました。
とりあえず、該当メッセージをキーワードにしてgrep。関係しそうな部分をピックアップ。
% grep -rn 'PHP: ' php5.3-200803190730 php5.3-200803190730/Zend/zend_ini_parser.c:294: fprintf(stderr, "PHP: %s", error_buf); php5.3-200803190730/Zend/zend_ini_parser.y:181: fprintf(stderr, "PHP: %s", error_buf); % grep -rn 'syntax error, unexpected' php5.3-200803190730 php5.3-200803190730/Zend/zend_ini_parser.c:1224: YY_("syntax error, unexpected %s"); php5.3-200803190730/Zend/zend_ini_parser.c:1225: YY_("syntax error, unexpected %s, expecting %s"); php5.3-200803190730/Zend/zend_ini_parser.c:1226: YY_("syntax error, unexpected %s, expecting %s or %s"); php5.3-200803190730/Zend/zend_ini_parser.c:1227: YY_("syntax error, unexpected %s, expecting %s or %s or %s"); php5.3-200803190730/Zend/zend_ini_parser.c:1228: YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); php5.3-200803190730/Zend/zend_ini_parser.c:1232: static char const yyunexpected[] = "syntax error, unexpected %s"; % grep -rn 'TC_CONSTANT' php5.3-200803190730 php5.3-200803190730/Zend/zend_ini_scanner.c:1303: RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); php5.3-200803190730/Zend/zend_ini_scanner.c:2228: RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); php5.3-200803190730/Zend/zend_ini_scanner.c:2989: RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); php5.3-200803190730/Zend/zend_ini_parser.output:65: 32 constant_string: TC_CONSTANT php5.3-200803190730/Zend/zend_ini_parser.output:104:TC_CONSTANT (260) 32 php5.3-200803190730/Zend/zend_ini_parser.output:179: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:209: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:247: 32 constant_string: TC_CONSTANT . php5.3-200803190730/Zend/zend_ini_parser.output:304: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:336: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:371: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:460: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:481: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:502: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:533: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:640: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:661: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.output:682: TC_CONSTANT shift, and go to state 9 php5.3-200803190730/Zend/zend_ini_parser.c:79: TC_CONSTANT = 260, php5.3-200803190730/Zend/zend_ini_parser.c:96:#define TC_CONSTANT 260 php5.3-200803190730/Zend/zend_ini_parser.c:700: "$end", "error", "$undefined", "TC_SECTION", "TC_RAW", "TC_CONSTANT", php5.3-200803190730/Zend/zend_ini_parser.h:44: TC_CONSTANT = 260, php5.3-200803190730/Zend/zend_ini_parser.h:61:#define TC_CONSTANT 260 php5.3-200803190730/Zend/zend_ini_scanner.l:418: RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); php5.3-200803190730/Zend/zend_ini_parser.y:254:%token TC_CONSTANT php5.3-200803190730/Zend/zend_ini_parser.y:352: TC_CONSTANT { zend_ini_get_constant(&$$, &$1 TSRMLS_CC); }
とはいえ、処理は行われるみたい。
% ./php-5.3-dev-cli -c /path/to/php.ini -r 'echo "done"; echo PHP_EOL;' PHP: syntax error, unexpected TC_CONSTANT in /path/to/php.ini on line **** done
うーむ。ちょっと横道にそれてしまったカモ。