LINUX.ORG.RU
ФорумAdmin

php 5.6.21 + Apache 2.0.59 (Cannot libphp5.so into server)

 , ,


0

1

Добрый день.

OC slackware 12.2

Linux 2.4.33.3 #1 Fri Sep 1 01:48:52 CDT 2006 i686 pentium4 i386 GNU/Linux

Скачал исходники php, собрал

/configure --prefix=/usr/local/php-5.6 --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --with-gd --with-curl=/usr/local/curl-7.49/ --with-zlib --enable-sockets --with-openssl --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-freetype-dir=/usr/lib --enable-exif --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --enable-bcmath --with-config-file-scan-dir=/etc/php.d --with-config-file-path=/etc --with-gettext --with-iconv=/home/php-5.6.21/ext/iconv/

make

make install

root@test:/home/php-5.6.21# make install

Installing PHP SAPI module: apache2handler

/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' libphp5.la /usr/local/apache2/modules

/usr/local/apache2/build/libtool --mode=install cp libphp5.la /usr/local/apache2/modules/

cp .libs/libphp5.so /usr/local/apache2/modules/libphp5.so

cp .libs/libphp5.lai /usr/local/apache2/modules/libphp5.la

libtool: install: warning: remember to run `libtool --finish /home/php-5.6.21/libs'

chmod 755 /usr/local/apache2/modules/libphp5.so

[activating module `php5' in /usr/local/apache2/conf/httpd.conf]

Installing shared extensions: /usr/local/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/

Installing PHP CLI binary: /usr/local/php-5.6/bin/

Installing PHP CLI man page: /usr/local/php-5.6/php/man/man1/

Installing PHP CGI binary: /usr/local/php-5.6/bin/

Installing PHP CGI man page: /usr/local/php-5.6/php/man/man1/

Installing build environment: /usr/local/php-5.6/lib/php/build/

Installing header files: /usr/local/php-5.6/include/php/

Installing helper programs: /usr/local/php-5.6/bin/ program: phpize program: php-config

Installing man pages: /usr/local/php-5.6/php/man/man1/ page: phpize.1 page: php-config.1

Installing PEAR environment: /usr/local/php-5.6/lib/php/

[PEAR] Archive_Tar - already installed: 1.4.0[PEAR] Console_Getopt - already installed: 1.4.1[PEAR] Structures_Graph- already installed: 1.1.1[PEAR] XML_Util - already installed: 1.3.0[PEAR] PEAR - already installed: 1.10.1

Wrote PEAR system config file at: /usr/local/php-5.6/etc/pear.conf

You may want to add: /usr/local/php-5.6/lib/php to your php.ini include_path

/home/php-5.6.21/build/shtool install -c ext/phar/phar.phar /usr/local/php-5.6/bin

в процессе сборки/компилирования/установки ошибок не было

перезапускаю apache

root@test:/usr/local/apache2/modules# /etc/rc.d/rc.httpd start

Syntax error on line 232 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: undefined symbol: apr_strtoff

Что я сделал не так? Не могу понять, модуль создается (см вывод make install)

Подскажите пожалуйста в каком направлении копать



Последнее исправление: Ivan_123 (всего исправлений: 1)

Древний апач (2.0.59) не имеет функции apr_strtoff(), а ваш модуль её хочет. Либо php неправильно определяет версию апача, либо он не расчитан на сборку с этой древностью.

Якобы вот этот код http://howto-heaven.blogspot.ru/2011/02/how-to-fix-undefined-symbol-aprstrtof..., если засунуть его в исходник модуля, уберёт ошибку.

Но, ИМХО, лучше обновить систему, раз захотелось свжего php.

mky ★★★★★
()
14 апреля 2017 г.

Тоже столкнулся с этой проблемой. Изучение внутренностей php показало, что эта функция есть только в одном файле: sapi_apache2.c . В php-5.4 этого куска кода не было. Сделал патч:

--- php-5.6.30.old/sapi/apache2handler/sapi_apache2.c   2017-04-14 07:41:08.000000000 +0300
+++ php-5.6.30/sapi/apache2handler/sapi_apache2.c       2017-04-14 07:58:24.000000000 +0300
@@ -126,15 +126,7 @@
                                }
                                ctx->content_type = estrdup(val);
                        } else if (!strcasecmp(sapi_header->header, "content-length")) {
-                               apr_off_t clen = 0;
-
-                               if (APR_SUCCESS != apr_strtoff(&clen, val, (char **) NULL, 10)) {
-                                       /* We'll fall back to strtol, since that's what we used to
-                                        * do anyway. */
-                                       clen = (apr_off_t) strtol(val, (char **) NULL, 10);
-                               }
-
-                               ap_set_content_length(ctx->r, clen);
+                               ap_set_content_length(ctx->r, (apr_off_t) strtol(val, (char **)NULL, 10));
                        } else if (op == SAPI_HEADER_REPLACE) {
                                apr_table_set(ctx->r->headers_out, sapi_header->header, val);
                        } else {

sp_
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.