ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

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

うーむ。ちょっと横道にそれてしまったカモ。