Ошибка токенизатора компиляции PHP-5.6 Ubuntu 14.04

Я настраиваю свой новый ноутбук с несколько версий PHP (7 и 5.6), когда после компиляции PHP-7.0 отлично получаю токенизатор ошибка в процессе компиляции PHP-5.6.

меры

  • sudo mkdir /opt/source
  • cd /opt/source
  • sudo git clone https://github.com/php/php-src.git
  • cd php-src
  • sudo git checkout PHP-5.6.17
  • sudo ./configure
    --prefix=/opt/php-5.6
    --with-pdo-pgsql
    --with-zlib-dir
    --with-freetype-dir
    --enable-mbstring
    --with-libxml-dir=/usr
    --enable-soap
    --enable-calendar
    --with-curl
    --with-mcrypt
    --with-zlib
    --with-gd
    --with-pgsql
    --disable-rpath
    --enable-inline-optimization
    --with-bz2
    --with-zlib
    --enable-sockets
    --enable-sysvsem
    --enable-sysvshm
    --enable-pcntl
    --enable-mbregex
    --enable-exif
    --enable-bcmath
    --with-mhash
    --enable-zip
    --with-pcre-regex
    --with-mysql
    --with-pdo-mysql
    --with-mysqli
    --with-png-dir=/usr
    --enable-gd-native-ttf
    --with-openssl
    --with-fpm-user=nginx
    --with-fpm-group=nginx
    --with-libdir=/lib/x86_64-linux-gnu
    --enable-ftp
    --with-imap
    --with-imap-ssl
    --with-kerberos
    --with-gettext
    --with-gd
    --with-jpeg-dir=/usr/lib/
    --enable-fpm

Ошибка

/bin/bash /opt/source/php-src/libtool --silent --preserve-dup-deps --mode=compile cc  -Iext/standard/ -I/opt/source/php-src/ext/standard/ -DPHP_ATOM_INC -I/opt/source/php-src/include -I/opt/source/php-src/main -I/opt/source/php-src -I/opt/source/php-src/ext/date/lib -I/opt/source/php-src/ext/ereg/regex -I/usr/include/libxml2 -I/usr/include/freetype2 -I/usr/include/c-client -I/opt/source/php-src/ext/mbstring/oniguruma -I/opt/source/php-src/ext/mbstring/libmbfl -I/opt/source/php-src/ext/mbstring/libmbfl/mbfl -I/usr/include/postgresql -I/opt/source/php-src/ext/sqlite3/libsqlite -I/opt/source/php-src/ext/zip/lib -I/opt/source/php-src/TSRM -I/opt/source/php-src/Zend    -I/usr/include -g -O2 -fvisibility=hidden  -c /opt/source/php-src/ext/standard/info.c -o ext/standard/info.lo
/bin/bash /opt/source/php-src/libtool --silent --preserve-dup-deps --mode=compile cc  -Iext/tokenizer/ -I/opt/source/php-src/ext/tokenizer/ -DPHP_ATOM_INC -I/opt/source/php-src/include -I/opt/source/php-src/main -I/opt/source/php-src -I/opt/source/php-src/ext/date/lib -I/opt/source/php-src/ext/ereg/regex -I/usr/include/libxml2 -I/usr/include/freetype2 -I/usr/include/c-client -I/opt/source/php-src/ext/mbstring/oniguruma -I/opt/source/php-src/ext/mbstring/libmbfl -I/opt/source/php-src/ext/mbstring/libmbfl/mbfl -I/usr/include/postgresql -I/opt/source/php-src/ext/sqlite3/libsqlite -I/opt/source/php-src/ext/zip/lib -I/opt/source/php-src/TSRM -I/opt/source/php-src/Zend    -I/usr/include -g -O2 -fvisibility=hidden  -c /opt/source/php-src/ext/tokenizer/tokenizer.c -o ext/tokenizer/tokenizer.lo
/bin/bash /opt/source/php-src/libtool --silent --preserve-dup-deps --mode=compile cc  -Iext/tokenizer/ -I/opt/source/php-src/ext/tokenizer/ -DPHP_ATOM_INC -I/opt/source/php-src/include -I/opt/source/php-src/main -I/opt/source/php-src -I/opt/source/php-src/ext/date/lib -I/opt/source/php-src/ext/ereg/regex -I/usr/include/libxml2 -I/usr/include/freetype2 -I/usr/include/c-client -I/opt/source/php-src/ext/mbstring/oniguruma -I/opt/source/php-src/ext/mbstring/libmbfl -I/opt/source/php-src/ext/mbstring/libmbfl/mbfl -I/usr/include/postgresql -I/opt/source/php-src/ext/sqlite3/libsqlite -I/opt/source/php-src/ext/zip/lib -I/opt/source/php-src/TSRM -I/opt/source/php-src/Zend    -I/usr/include -g -O2 -fvisibility=hidden  -c /opt/source/php-src/ext/tokenizer/tokenizer_data.c -o ext/tokenizer/tokenizer_data.lo
In file included from /opt/source/php-src/main/php.h:406:0,
from /opt/source/php-src/ext/tokenizer/tokenizer_data.c:26:
/opt/source/php-src/ext/tokenizer/tokenizer_data.c: In function ‘tokenizer_register_constants’:
/opt/source/php-src/ext/tokenizer/tokenizer_data.c:89:40: error: ‘T_CHARACTER’ undeclared (first use in this function)
REGISTER_LONG_CONSTANT("T_CHARACTER", T_CHARACTER, CONST_CS | CONST_PERSISTENT);
^
/opt/source/php-src/Zend/zend_constants.h:43:103: note: in definition of macro ‘REGISTER_LONG_CONSTANT’
#define REGISTER_LONG_CONSTANT(name, lval, flags)  zend_register_long_constant((name), sizeof(name), (lval), (flags), module_number TSRMLS_CC)
^
/opt/source/php-src/ext/tokenizer/tokenizer_data.c:89:40: note: each undeclared identifier is reported only once for each function it appears in
REGISTER_LONG_CONSTANT("T_CHARACTER", T_CHARACTER, CONST_CS | CONST_PERSISTENT);
^
/opt/source/php-src/Zend/zend_constants.h:43:103: note: in definition of macro ‘REGISTER_LONG_CONSTANT’
#define REGISTER_LONG_CONSTANT(name, lval, flags)  zend_register_long_constant((name), sizeof(name), (lval), (flags), module_number TSRMLS_CC)
^
/opt/source/php-src/ext/tokenizer/tokenizer_data.c:90:44: error: ‘T_BAD_CHARACTER’ undeclared (first use in this function)
REGISTER_LONG_CONSTANT("T_BAD_CHARACTER", T_BAD_CHARACTER, CONST_CS | CONST_PERSISTENT);
^
/opt/source/php-src/Zend/zend_constants.h:43:103: note: in definition of macro ‘REGISTER_LONG_CONSTANT’
#define REGISTER_LONG_CONSTANT(name, lval, flags)  zend_register_long_constant((name), sizeof(name), (lval), (flags), module_number TSRMLS_CC)
^
/opt/source/php-src/ext/tokenizer/tokenizer_data.c: In function ‘get_token_type_name’:
/opt/source/php-src/ext/tokenizer/tokenizer_data.c:228:8: error: ‘T_CHARACTER’ undeclared (first use in this function)
case T_CHARACTER: return "T_CHARACTER";
^
/opt/source/php-src/ext/tokenizer/tokenizer_data.c:229:8: error: ‘T_BAD_CHARACTER’ undeclared (first use in this function)
case T_BAD_CHARACTER: return "T_BAD_CHARACTER";
^
make: *** [ext/tokenizer/tokenizer_data.lo] Error 1
root@patrick:/opt/source/php-src#

Настроить

  • Ubuntu 14.04.3 x64
  • 8 ГБ ОЗУ
  • Intel i5

Если вам нужна дополнительная информация, скажите мне, прежде чем голосовать вниз.

Благодарю.

7

Решение

Я столкнулся с этой же ошибкой при попытке компиляции PHP 5.6.30 на Ubuntu 14 и решил продолжить еще. Оказалось, что я использовал неподдерживаемую версию GNU Bison. Ubuntu 14.04 предоставляет версию Bison 3.x.x, Оказывается, что PHP5 поддерживает только Bison 2.4 и выше (но не больше или равно 3.x.x). Я не нашел точного источника, подтверждающего это утверждение. Однако я считаю, что мой вывод обоснован методом проб и ошибок.

Чтобы скомпилировать PHP 5.6 в Ubuntu 14.04, я скачал Bison 2.5 из Launchpad. Найдите архитектуру своей машины и загрузите соответствующую .deb архив. Извлеките содержимое раздела данных пакета в какой-то каталог, например:

$ ar x bison_2.5.dfsg-2.1_ARCH.deb
$ tar xf data.tar.gz

Теперь вам нужно указать скрипту configure, чтобы использовать эту версию Bison при настройке сборки. Для этого установите PATH Переменная в первую точку в местоположении пользовательского двоичного файла Bison (примечание: архив данных расширяется до ./usr/bin/bison в каталоге извлечения):

$ PATH=/path/to/extraction/usr/bin:$PATH ./configure ...

Вы должны увидеть что-то вроде следующего:

checking for bison... bison -y
checking for bison version... 2.5 (ok)

Сейчас попробуй make, Если результаты похожи на мои, он должен работать правильно.

Интересно, что я построил PHP 7.0.9 до использования бизона 3 и все работало нормально. Я склонен думать, что это только ограничение для сборок PHP 5.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]