antlord |
|
Темы:
30
Сообщения:
195
Участник с: 24 июня 2012
|
Добрый день, возникла проблема после обновления gd. После него мои 2 Apache (один с PHP 5.2.17, другой с PHP 5.3.15) перестали запускаться, выдавая ошибку ./apachectl: line 78: 3268 Ошибка сегментирования (core dumped) $HTTPD $ARGV LoadModule php5_module modules/libphp5.so Сразу скажу, что все Apache и PHP собраны из исходников. Я тогда решил проверить работоспособность интерпритатора, просто, узнав его версию. Оба PHP выдали ./php: error while loading shared libraries: libgd.so.2: cannot open shared object file: No such file or directory Я решил сначала пересобрать PHP 5.2.17 следующей командой: ./configure --prefix=/usr/local/php5.2/ --with-mysql=/usr/include/mysql --enable-force-cgi-redirect --enable-zend-multibyte --enable-mbstring --enable-zip --with-pdo-mysql --with-curl=/usr --with-mcrypt=/usr --with-apxs2=/usr/local/apache2php5.2/bin/apxs --with-zlib=/usr --with-gd --with-gdbm --enable-sockets --with-mysqli=/usr/bin/mysql_config --with-gd=/usr --enable-soap в процессе компиляции вылазит такая ошибка: /home/$username$/Downloads/php-5.2.17/ext/dom/node.c: В функции «dom_canonicalization»: /home/$username$/Downloads/php-5.2.17/ext/dom/node.c:1953:21: ошибка: доступ по указателю на неполный тип ret = buf->buffer->use; ^ In file included from /home/$username$/Downloads/php-5.2.17/main/php.h:38:0, from /home/$username$/Downloads/php-5.2.17/ext/dom/node.c:26: /home/$username$/Downloads/php-5.2.17/ext/dom/node.c:1955:40: ошибка: доступ по указателю на неполный тип RETVAL_STRINGL((char *) buf->buffer->content, ret, 1); ^ /home/$username$/Downloads/php-5.2.17/Zend/zend_API.h:472:14: замечание: in definition of macro «ZVAL_STRINGL» char *__s=(s); int __l=l; \ ^ /home/$username$/Downloads/php-5.2.17/ext/dom/node.c:1955:5: замечание: in expansion of macro «RETVAL_STRINGL» RETVAL_STRINGL((char *) buf->buffer->content, ret, 1); ^ make: *** [ext/dom/node.lo] Ошибка 1 С PHP 5.3.15 все то же самое. Естесственно, я его ставлю по другим путям и прикрепляю к другому Apache. После я решил установить PHP 5.3.27 (крик отчаяния). Его конфигурировал я так: ./configure --prefix=/usr/local/php/ --with-mysql=/usr/include/mysql --enable-mbstring --with-pdo-mysql --with-curl=/usr --with-mcrypt=/usr --with-apxs2=/usr/local/apache2/bin/apxs --with-zlib=/usr --with-gd --with-gdbm --enable-sockets --with-mysqli=/usr/bin/mysql_config --with-gd=/usr ext/gd/.libs/gd.o: In function `zif_imageloadfont': /home/$username$/Downloads/php-5.3.27/ext/gd/gd.c:1528: undefined reference to `overflow2' /home/$username$/Downloads/php-5.3.27/ext/gd/gd.c:1534: undefined reference to `overflow2' ext/gd/.libs/gd.o: In function `_php_image_type': /home/$username$/Downloads/php-5.3.27/ext/gd/gd.c:2266: undefined reference to `gdGetC' /home/$username$/Downloads/php-5.3.27/ext/gd/gd.c:2266: undefined reference to `getmbi' /home/$username$/Downloads/php-5.3.27/ext/gd/gd.c:2266: undefined reference to `skipheader' collect2: error: ld returned 1 exit status Более новые версии не нужны, так как есть проекты на поддержке, у которых битрикс написан на php 5.2 и php 5.3 |
pavelvershinin |
|
Темы:
2
Сообщения:
38
Участник с: 18 октября 2011
|
Откатите GD, делов то. |
antlord |
|
Темы:
30
Сообщения:
195
Участник с: 24 июня 2012
|
Как? О_о |
pavelvershinin |
|
Темы:
2
Сообщения:
38
Участник с: 18 октября 2011
|
Ничего сложного https://wiki.archlinux.org/index.php/Downgrading_Packages_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) И после отката не забудьте добавить gd в IgnorePkg в файле /etc/pacman.conf чтобы он обратно не обновился. |
corner |
|
Темы:
6
Сообщения:
773
Участник с: 21 июля 2011
|
А вообще ничего, что gd собран под php 5.4 ? Вы тогда и gd компилируйте. И пора отказываься от php 5.3 - он же уже устарел. Даже на debian стоит 5.4 И, если уж сами компилируете, то и зависимости проверяйте. От версии пакетов тоже многое зависит. P.S. Столкнулся с PHP 5.2 на паре зарубежных хостингов (в Америке). ПО (на 5.4) не работает. При этом задекларирован 5.4. Протестировал - ан нет - 5.2! Б... руки бы поотрывал. |
antlord |
|
Темы:
30
Сообщения:
195
Участник с: 24 июня 2012
|
Я сам знаю, что надо отказываться. По мне так и от PHP надо отказываться) Но есть проекты, которые работают на старом PHP. CMS c того времени, обновлялась, но на проекте ее не обновляли, потому что при ее обновлении всегда что-нибудь "отваливается". А чтоб контролировать, что "отвалилось", надо писать тесты. А тесты не пишутся, потому что клиент не готов платить за них, вот так и живем. И прекрасно знаем, что надо жить по-другому, но временно придется пожить так. Речь идет не о пакете php-gd, а он gd. Про php-gd я узнал только на днях, что есть такой пакет. Разница, наверное, что один для php, а другой для C++ или С. В общем мне откат не помог, кстати( Видимо надо копать в сторону libxml. |
antlord |
|
Темы:
30
Сообщения:
195
Участник с: 24 июня 2012
|
В общем в который раз работает пословица "спасение утопающего – дело рук самого утопающего". В общем порыскав интернет капитально, нашел, что проблема в libxml при компиляции не у меня одного и достаточно "свежая". В общем надо немного подправить исходники PHP 5.2 вот так: diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c index d61ba79..eee3b5f 100644 --- a/ext/dom/documenttype.c +++ b/ext/dom/documenttype.c @@ -205,7 +205,11 @@ int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_ if (buff != NULL) { xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL); xmlOutputBufferFlush(buff); +#ifdef LIBXML2_NEW_BUFFER + ZVAL_STRINGL(*retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff), 1); +#else ZVAL_STRINGL(*retval, buff->buffer->content, buff->buffer->use, 1); +#endif (void)xmlOutputBufferClose(buff); return SUCCESS; } diff --git a/ext/dom/node.c b/ext/dom/node.c index 5bcb234..727d1bc 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -1895,9 +1895,17 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ RETVAL_FALSE; } else { if (mode == 0) { +#ifdef LIBXML2_NEW_BUFFER + ret = xmlOutputBufferGetSize(buf); +#else ret = buf->buffer->use; +#endif if (ret > 0) { +#ifdef LIBXML2_NEW_BUFFER + RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret, 1); +#else RETVAL_STRINGL((char *) buf->buffer->content, ret, 1); +#endif } else { RETVAL_EMPTY_STRING(); } diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index a379111..2368596 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -1387,7 +1387,11 @@ SXE_METHOD(asXML) xmlNodeDumpOutput(outbuf, (xmlDocPtr) sxe->document->ptr, node, 0, 0, ((xmlDocPtr) sxe->document->ptr)->encoding); xmlOutputBufferFlush(outbuf); +#ifdef LIBXML2_NEW_BUFFER + RETVAL_STRINGL((char *)xmlOutputBufferGetContent(outbuf), xmlOutputBufferGetSize(outbuf), 1); +#else RETVAL_STRINGL((char *)outbuf->buffer->content, outbuf->buffer->use, 1); +#endif xmlOutputBufferClose(outbuf); } } else { |