Есть выделенный сервер с сайтами в интернете с установленным Debian 3.2.63-2+deb7u2 x86_64 и nginx 1.2.1 в качестве frontend и Apache/2.2.22 в качестве backend. Обновлял сервер и php этими командами: apt-get update apt-get dist-upgrade echo "deb http://packages.dotdeb.org wheezy-php56 all" >> /etc/apt/sources.list.d/dotdeb.list echo "deb-src http://packages.dotdeb.org wheezy-php56 all" >> /etc/apt/sources.list.d/dotdeb.list wget http://www.dotdeb.org/dotdeb.gpg -O- | apt-key add - apt-get update apt-cache search php5 apt-get install php5-fpm После обновления пришлось исправить кодировку по умолчанию в настройках /etc/php5/apache2/php.ini default_charset = "Windows-1251" так как у нескольких сайтов вылезли кракозябры на всех страницах. После обновления php с версии 5.4.45 на версию 5.6.36_1 обратили внимание что один из сайтов при открытии главной страницы показывает белый пустой экран. Стал разбиратся и заметил что в файле /etc/php5/apache2/php.ini в разделе Dynamic extensions было указано extension = templates.so И после перезагрузки сервисов nginx apache2 php5-fpm стал на почту получать от сервера письма с периодичностью одно письмо в 30 минут. PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20131226/ templates.so' - /usr/lib/php5/20131226/templates.so: cannot open shared object file: No such file or directory in Unknown on line 0 После выяснения что за дополнение пробует подгрузить php оказалось что это дополнение было скомпилировано к версии php 5.4.45 В директории /usr/lib/php5/20100525/ на сервере нашёл файл которому уже было где-то лет 5 templates.so я скопировал его в папку /usr/lib/php5/20131226/ но начал получать уже другие сообщения от сервера себе на почту PHP Warning: PHP Startup: templates: Unable to initialize module Module compiled with module API=20100525 PHP compiled with module API=20131226 These options need to match Стало понятно что мне придётся найти в интернете исходники php-templates и скомпилировать их под свою версию php. Последняя актуальная версия templates была 1.7.2 на сайте https://github.com/rusoft/php-templates Но при попытке скомпилировать командами предложенными в файле INSTALL : tar -zxf templates.tar.gz cd temlpates phpize ./configure --enable-templates=shared make Выполняя команду phpize получаю следующее: Код (Text): Configuring for: PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226 команда ./configure --enable-templates=shared выполняется без ошибок Код (Text): checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for a sed that does not truncate output... /bin/sed checking for cc... cc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether cc accepts -g... yes checking for cc option to accept ISO C89... none needed checking how to run the C preprocessor... cc -E checking for icc... no checking for suncc... no ..................... checking if cc supports -fno-rtti -fno-exceptions... no checking for cc option to produce PIC... -fPIC -DPIC checking if cc PIC flag -fPIC -DPIC works... yes checking if cc static flag -static works... yes checking if cc supports -c -o file.o... yes checking if cc supports -c -o file.o... (cached) yes checking whether the cc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... no configure: creating ./config.status config.status: creating config.h config.status: executing libtool commands после запуска команды make получаю много сообщений об ошибках и сборка прерывается: Код (Text): /bin/bash /tmp/templates/libtool --mode=compile cc -I. -I/tmp/templates -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/templates/templates.c -o templates.lo libtool: compile: cc -I. -I/tmp/templates -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/templates/templates.c -fPIC -DPIC -o .libs/templates.o /tmp/templates/templates.c:51:1: error: unknown type name 'function_entry' /tmp/templates/templates.c:52:2: warning: braces around scalar initializer [enabled by default] /tmp/templates/templates.c:52:2: warning: (near initialization for 'templates_functions[0]') [enabled by default] /tmp/templates/templates.c:52:2: warning: initialization makes integer from pointer without a cast [enabled by default] /tmp/templates/templates.c:52:2: warning: (near initialization for 'templates_functions[0]') [enabled by default] /tmp/templates/templates.c:52:2: error: initializer element is not computable at load time /tmp/templates/templates.c:52:2: error: (near initialization for 'templates_functions[0]') /tmp/templates/templates.c:52:2: warning: excess elements in scalar initializer [enabled by default] /tmp/templates/templates.c:52:2: warning: (near initialization for 'templates_functions[0]') [enabled by default] /tmp/templates/templates.c:52:2: warning: excess elements in scalar initializer [enabled by default] /tmp/templates/templates.c:52:2: warning: (near initialization for 'templates_functions[0]') [enabled by default] /tmp/templates/templates.c:52:2: warning: excess elements in scalar initializer [enabled by default] /tmp/templates/templates.c:52:2: warning: (near initialization for 'templates_functions[0]') [enabled by default] /tmp/templates/templates.c:52:2: warning: excess elements in scalar initializer [enabled by default] /tmp/templates/templates.c:52:2: warning: (near initialization for 'templates_functions[0]') [enabled by default] /tmp/templates/templates.c:53:2: warning: braces around scalar initializer [enabled by default] /tmp/templates/templates.c:53:2: warning: (near initialization for 'templates_functions[1]') [enabled by default] /tmp/templates/templates.c:53:2: warning: initialization makes integer from pointer without a cast [enabled by default] ............................... /tmp/templates/templates.c:726:3: warning: 'zend_get_parameters_ex' is deprecated (declared at /usr/include/php5/Zend/zend_API.h:241) [-Wdeprecated-declarations] /tmp/templates/templates.c:728:3: warning: 'zend_get_parameters_ex' is deprecated (declared at /usr/include/php5/Zend/zend_API.h:241) [-Wdeprecated-declarations] /tmp/templates/templates.c:730:3: warning: 'zend_get_parameters_ex' is deprecated (declared at /usr/include/php5/Zend/zend_API.h:241) [-Wdeprecated-declarations] /tmp/templates/templates.c:732:3: warning: 'zend_get_parameters_ex' is deprecated (declared at /usr/include/php5/Zend/zend_API.h:241) [-Wdeprecated-declarations] /tmp/templates/templates.c: In function 'zif_tmpl_unset': /tmp/templates/templates.c:786:3: warning: 'zend_get_parameters_ex' is deprecated (declared at /usr/include/php5/Zend/zend_API.h:241) [-Wdeprecated-declarations] /tmp/templates/templates.c:788:3: warning: 'zend_get_parameters_ex' is deprecated (declared at /usr/include/php5/Zend/zend_API.h:241) [-Wdeprecated-declarations] make: *** [templates.lo] Помилка 1 Пробовал компилировать templates на других серверах Debian и на всех получаю одни и те же ошибки. Скомпилировать templates.so удалось только на сервере FreeBSD 11.1 но и после того как я скопировал файл templates.so на сервер получил такую ошибку на свою почту от сервера: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20131226/ templates.so' - /usr/lib/php5/20131226/templates.so: wrong ELF class: ELFCLASS32 in Unknown on line 0 У меня вопрос как мне собрать templates.so и подсунуть моему серверу ? Может у кого-нибудь уже есть собранная templates.so и он может мне её передать.
Сегодня я могу описать как мне удалось решить мою проблему и вернуть сайт снова в работу. Хотя проблему я решил на пару дней раньше! Действительно для работы этого сайта требовался файл temlates.so в этой директории /usr/lib/php5/20131226/ После длительных поисков решения проблемы на просторах интернета. мне удалось найти решение по сборке дополнения php-templates для версии php5.6.36_1. Сначала я нашёл на этом сайте https://sourceforge.net/p/php-templates/bugs/14/ подсказку что нужно исправить в файле templates.c чтобы сборка прошла успешно Ubuntu Server 14.04.3 LTS Apache 2.4.7 PHP 5.5.9 command "make" say: error: unknown type name 'function_entry' in template.c replace "function_entry" to "zend_function_entry" and enjoy! Открыл файл нашёл строку function_entry templates_functions[] = { добавил в начало строки zend_ zend_function_entry templates_functions[] = { и снова запустил команду make получил на экран другие сообщения об ошибках: Код (Text): root@server /tmp/templates # make /bin/bash /tmp/templates/libtool --mode=compile cc -I. -I/tmp/templates -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/templates/tmpl_lib.c -o tmpl_lib.lo libtool: compile: cc -I. -I/tmp/templates -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/templates/tmpl_lib.c -fPIC -DPIC -o .libs/tmpl_lib.o /tmp/templates/tmpl_lib.c: In function 'php_tmpl_pre_parse': /tmp/templates/tmpl_lib.c:217:21: error: lvalue required as left operand of assignment /tmp/templates/tmpl_lib.c: In function 'php_tmpl_set': /tmp/templates/tmpl_lib.c:446:32: warning: comparison of distinct pointer types lacks a cast [enabled by default] /tmp/templates/tmpl_lib.c:447:7: warning: comparison of distinct pointer types lacks a cast [enabled by default] /tmp/templates/tmpl_lib.c: In function 'php_tmpl_parse': /tmp/templates/tmpl_lib.c:700:20: error: lvalue required as left operand of assignment /tmp/templates/tmpl_lib.c: In function 'php_tmpl_load_structure': /tmp/templates/tmpl_lib.c:880:19: error: lvalue required as left operand of assignment make: *** [tmpl_lib.lo] Помилка 1 Вывод строк сборки значительно уменьшился. После этого пришлось снова поискать в интернете что делать с ошибками в файле tmpl_lib.c Нашёл ещё одну страницу где предлагалось внести исправления в строки на которых спотыкался сборщик. https://blog.himic.ru/2011/01/26/74.html Читайте 1 коментарий saint-technik к статье HiMiC "Установка модуля PHP templates.so на Debian Lenny x86". Открыв файл я нашёл строки на которых спотыкался сборщик и внёс необходимые исправления. У меня это были строки 217, 446, 447, 700, 880. Предлагалось заменить в строках 217, 446, 447, 700 и 880 заменить функцию ZV() на Z_STRVAL_P(). строка 217 оригинал: Код (Text): ZV(tmpl->original) = (char*)erealloc(ZV(tmpl->original), Z_STRVAL_P(tmpl->original) = (char*)erealloc(Z_STRVAL_P(tmpl->original), строка 217 исправлена: строка 446 оригинал: Код (Text): for(p = ZV(path)+ZL(path); p >= ZV(path) && *p != '/'; p--); for(p = Z_STRVAL_P(path)+ZL(path); p >= Z_STRVAL_P(path) && *p != '/'; p--); строка 446 исправлена: строка 447 оригинал: Код (Text): *(p > ZV(path) ? p++ : ++p) = 0; *(p > Z_STRVAL_P(path) ? p++ : ++p) = 0; строка 447 исправлена: строка 700 оригинал: Код (Text): ZV(new_path) = (char*)erealloc(ZV(new_path), buf_alloc); Z_STRVAL_P(new_path) = (char*)erealloc(Z_STRVAL_P(new_path), buf_alloc); строка 700 исправлена: строка 880 оригинал: Код (Text): ZV(new_value) = (char*)erealloc(ZV(new_value), ZL(new_value)+2); Z_STRVAL_P(new_value) = (char*)erealloc(Z_STRVAL_P(new_value), ZL(new_value)+2); строка 880 исправлена: После внесения исправлений я снова запустил команду make Код (Text): root@server /tmp/templates # make /bin/bash /tmp/templates/libtool --mode=compile cc -I. -I/tmp/templates -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/templates/tmpl_lib.c -o tmpl_lib.lo libtool: compile: cc -I. -I/tmp/templates -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/templates/tmpl_lib.c -fPIC -DPIC -o .libs/tmpl_lib.o /bin/bash /tmp/templates/libtool --mode=compile cc -I. -I/tmp/templates -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/templates/search.c -o search.lo libtool: compile: cc -I. -I/tmp/templates -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/templates/search.c -fPIC -DPIC -o .libs/search.o /bin/bash /tmp/templates/libtool --mode=link cc -DPHP_ATOM_INC -I/tmp/templates/include -I/tmp/templates/main -I/tmp/templates -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -o templates.la -export-dynamic -avoid-version -prefer-pic -module -rpath /tmp/templates/modules templates.lo tmpl_lib.lo search.lo libtool: link: cc -shared -fPIC -DPIC .libs/templates.o .libs/tmpl_lib.o .libs/search.o -O2 -Wl,-soname -Wl,templates.so -o .libs/templates.so libtool: link: ( cd ".libs" && rm -f "templates.la" && ln -s "../templates.la" "templates.la" ) /bin/bash /tmp/templates/libtool --mode=install cp ./templates.la /tmp/templates/modules libtool: install: cp ./.libs/templates.so /tmp/templates/modules/templates.so libtool: install: cp ./.libs/templates.lai /tmp/templates/modules/templates.la libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sbin" ldconfig -n /tmp/templates/modules ---------------------------------------------------------------------- Libraries have been installed in: /tmp/templates/modules If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- Build complete. Don't forget to run 'make test'. Сборка прошла до конца! Привожу листинг команды make test Код (Text): root@server /tmp/templates # make test Build complete. Don't forget to run 'make test'. ===================================================================== PHP : /usr/bin/php PHP_SAPI : cli PHP_VERSION : 5.6.36-1~dotdeb+7.1 ZEND_VERSION: 2.6.0 PHP_OS : Linux - Linux server 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u2 x86_64 INI actual : /tmp/templates/tmp-php.ini More .INIs : CWD : /tmp/templates Extra dirs : VALGRIND : Not used ===================================================================== TIME START 2018-07-04 15:20:39 ===================================================================== PASS Check for templates presence [tests/001.phpt] ===================================================================== TIME END 2018-07-04 15:20:39 ===================================================================== TEST RESULT SUMMARY --------------------------------------------------------------------- Exts skipped : 0 Exts tested : 44 --------------------------------------------------------------------- Number of tests : 1 1 Tests skipped : 0 ( 0.0%) -------- Tests warned : 0 ( 0.0%) ( 0.0%) Tests failed : 0 ( 0.0%) ( 0.0%) Expected fail : 0 ( 0.0%) ( 0.0%) Tests passed : 1 (100.0%) (100.0%) --------------------------------------------------------------------- Time taken : 0 seconds ===================================================================== This report can be automatically sent to the PHP QA team at http://qa.php.net/reports and http://news.php.net/php.qa.reports This gives us a better understanding of PHP's behavior. If you don't want to send the report immediately you can choose option "s" to save it. You can then email it to qa-reports@lists.php.net later. Do you want to send this report now? [Yns]: n После успешно выполненой команды make можно скопировать файл templates.so из директории modules в директорию с дополнениями php /usr/lib/php5/20131226/ Рестартовал сервисы service php5-fpm restart service nginx restart service apache2 restart и сайт снова стал открыватся. Выкладываю в тему архив с исправлениями и готовым файлом templates.so для Debian 64-bit и php5.6.35_1